Hallo! Möchte ein paar Daten aus der Datenbank des lokalen Shops raussuchen und bin daher gerade am testen des QueryBuilders. Ich habe bereits folgenden Code: $builder = Shopware()-\>Models()-\>createQueryBuilder(); $builder-\>select(array('name', 'description')) -\>from('Shopware\Models\Article\Article', 'article');
Da macht er keine Probleme. Will ich nun aber das Result haben und füge folgendes hinzu: $result = $builder-\>getQuery()-\>getArrayResult();
Dann stürzt der Shop ab mit ‘Ups ein Fehler ist aufgetreten’
Hallo! ich habe gerade das gleiche Problem, konntest Du das lösen?
Hallo DenKon26, versuch’ es doch einmal mit folgendem Code-Schnipsel: $builder = Shopware()-\>Models()-\>createQueryBuilder(); $builder-\>select(array('article.name', 'article.description')) -\>from('Shopware\Models\Article\Article', 'article'); $result = $builder-\>getQuery()-\>getArrayResult();
Dann dürfte das auch soweit klappen. Gruß, Patrick :shopware:
Hallo Patrick, ich versuche mich gerade an einem eigenen Plugin und habe auch das Problem mit dem Ausführen des Querys. Der Shop sagt “Ups! Ein Fehler ist aufgetreten!”. Mein Code sieht so aus, ich erkenne keinen Fehler. Ich übergebe die Ordernumber z.B. 259.0219.00 um alle Details zu erhalten. private function getArticleDetails($ordernumber) { $builder2 = Shopware()-\>Models()-\>createQueryBuilder(); //set sql selection object $builder2-\>select(array('details')); //add the from paths of the query $builder2-\>from('Shopware\Models\Article\Detail', 'details'); //add conditions for an active and valid article. $builder2-\>where('details.ordernumber = :ordernumber'); $builder2-\>andWhere('details.active = :active'); $builder2-\>andWhere('details.inStock \>= :inStock'); $builder2-\>setParameters(array('ordernumber' =\> $ordernumber, 'active' =\> true, 'inStock' =\> 0)); //return the query result as array return $builder2-\>getQuery()-\>getArrayResult(); }
Hallo ksk, du darfst dich bei deinen Where-Bedingungen nicht auf den Namen einer Spalte in der Datenbank verlassen, sondern musst dich am Doctrine-Model orientieren. Das heißt: $builder2-\>where('details.ordernumber = :ordernumber');
ist falsch, da die Datenbank-Spalte zwar wirklich „ordernumber“ heißt, im Doctrine-Model jedoch nur „number“ genannt wurde. Du musst dich da wirklich an dem Doctrine-Model orientieren, um die korrekten Namen/Felder zu finden. Das hast du beim inStock ja auch schon richtig gemacht. Richtig wäre also: $builder2-\>where('details.number = :ordernumber');
Hilft dir das weiter? Gruß, Patrick :shopware:
Hallo Patrick! :thumbup: Super, läuft! Du bist mein heutiger Held! Werde mir die Doctrine-Models genauer ansehen. Danke! Gruß ksk
Sorry hatte nur nen Smarty-Problem!
[quote]da die Datenbank-Spalte zwar wirklich “ordernumber” heißt, im Doctrine-Model jedoch nur “number” genannt wurde[/quote] …einmal mit profis arbeiten -.-