# QueryBuilder - Bestellungen

**URL:** <https://forum.shopware.com/t/querybuilder-bestellungen/12892>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [25. April 2013 um 13:17 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892 "2013-04-25T13:17:11Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![fulltime](https://avatars.discourse-cdn.com/v4/letter/f/7ab992/32.png) [@fulltime](https://forum.shopware.com/u/fulltime)\
**Post date:** [25. April 2013 um 13:17 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/1 "2013-04-25T13:17:11Z")

</div>

Hallo, es geht mir hierbei um die Erweiterung eines bestehenden QueryBuilders. Ich erstelle bei der Installation ein neues Attribute Feld. Dies nennt sich ‘futiShoeSize’ und wird in der Tabelle ‘s\_order\_details\_attributes’ angelegt. ` $this-\>Application()-\>Models()-\>addAttribute( 's\_order\_details\_attributes', 'futi', 'shoe\_size', 'int(11)', true, null ); ` Dieses Feld soll nun in die bestehende Abfrage hinzugefügt werden. Mein aktuelle Versuch sieht so aus. ` $events[] = $this-\>createEvent('Shopware\Models\Order\Repository::getOrdersQueryBuilder::after','getOrdersQueryBuilder'); ` ` public function getOrdersQueryBuilder(Enlight\_Hook\_HookArgs $arguments) { // get original builder $builder = $arguments-\>getReturn(); $builder-\>addSelect(array('futiShoeSize')) -\>from('Shopware\Models\Attribute\OrderDetail', 'orderDetailAttribute') -\>leftJoin('orderDetailAttribute.futiShoeSize', 'futiShoeSize'); $arguments-\>setReturn($builder); } ` Leider erhalte ich immer folgendes `{"success":false,"data":[],"message":"[Semantical Error] line 0, col 1230 near 'futiShoeSize': Error: Class Shopware\\Models\\Attribute\\OrderDetail has no association named futiShoeSize"}` Kann mir eventuell jemand sagen was ich bei dem addSelect genau falsch mache? Ich muss zugeben das ist für mich noch etwas Neuland 😉 Danke im Voraus 🙂

---

<div class="post-metadata">

**Author:** ![kotoradeluxe](https://avatars.discourse-cdn.com/v4/letter/k/47e85d/32.png) [@kotoradeluxe](https://forum.shopware.com/u/kotoradeluxe)\
**Post date:** [25. April 2013 um 13:59 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/2 "2013-04-25T13:59:25Z")

</div>

ich glaube, dass deine Spalte in den Attributen nicht `futiShoeSize` sondern `futi\_ShoeSize` heisst. bin mir nicht 100%ig sicher aber ich glaube dass die Attributfelder aus `[Prefix]\_[Spaltenname]` bestehen. Das müsstest du aber in der Datenbank Tabelle s\_order\_details\_attributes sehen

---

<div class="post-metadata">

**Author:** ![kotoradeluxe](https://avatars.discourse-cdn.com/v4/letter/k/47e85d/32.png) [@kotoradeluxe](https://forum.shopware.com/u/kotoradeluxe)\
**Post date:** [25. April 2013 um 14:04 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/3 "2013-04-25T14:04:31Z")

</div>

ja ich hatte recht 😉 siehe [https://github.com/ShopwareAG/shopware- … r.php#L378](https://github.com/ShopwareAG/shopware-4/blob/master/engine/Shopware/Components/Model/ModelManager.php#L378)

---

<div class="post-metadata">

**Author:** ![fulltime](https://avatars.discourse-cdn.com/v4/letter/f/7ab992/32.png) [@fulltime](https://forum.shopware.com/u/fulltime)\
**Post date:** [25. April 2013 um 14:55 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/4 "2013-04-25T14:55:01Z")

</div>

Hi, ersteinmal danke. Aber leider ändert sich mein Problem nicht. Wenn ich in die \Shopware\Models\Attribute\OrderDetail.php schaue finde ich folgende Einträge: ` /\*\* \* @var integer $futiShoeSize \* \* @ORM\Column(name="futi\_shoe\_size", type="integer", nullable=true) \*/ protected $futiShoeSize public function getFutiShoeSize() { return $this-\>futiShoeSize; } public function setFutiShoeSize($futiShoeSize) { $this-\>futiShoeSize = $futiShoeSize; return $this; } ` Ich hab jetz gerade mal ‘futi\_shoe\_size’ versucht. Leider erhalte ich da weiterhin folgendes: ` {"success":false,"data":[],"message":"[Semantical Error] line 0, col 1234 near 'futi\_shoe\_size': Error: Class Shopware\\Models\\Attribute\\OrderDetail has no association named futi\_shoe\_size"} `

---

<div class="post-metadata">

**Author:** ![fulltime](https://avatars.discourse-cdn.com/v4/letter/f/7ab992/32.png) [@fulltime](https://forum.shopware.com/u/fulltime)\
**Post date:** [25. April 2013 um 20:38 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/5 "2013-04-25T20:38:56Z")

</div>

Also ich hab jetzt mal die QueryBuilder Funktion rausgesucht. Diese sieht wie folgt aus. ` /\*\* \* Adds an item that is to be returned in the query result. \* \* `
     * $qb = $em->createQueryBuilder()
     * ->select('u')
     * ->addSelect('p')
     * ->from('User', 'u')
     * ->leftJoin('u.Phonenumbers', 'p');
     * ` \* \* @param mixed $select The selection expression. \* @return QueryBuilder This QueryBuilder instance. \*/ public function addSelect($select = null) { $this-\>\_type = self::SELECT; if (empty($select)) { return $this; } $selects = is\_array($select) ? $select : func\_get\_args(); return $this-\>add('select', new Expr\Select($selects), true); } ` Meine Aktuelle Funktion sieht wie folgt aus ` // get original builder $builder = $arguments-\>getReturn(); $builder-\>select('od') -\>addSelect('futi\_shoeSize') -\>from('Shopware\Models\Attribute\OrderDetail', 'od') -\>leftJoin('od.futi\_shoeSize', 'futi\_shoeSize'); $arguments-\>setReturn($builder);` Ich habe mein addAttribute jetzt noch auf folgendes geändert ` $this-\>Application()-\>Models()-\>addAttribute( 's\_order\_details\_attributes', 'futi', 'shoeSize', 'int(11)', true, null );` Resultat ist folgende Message `{"success":false,"data":[],"message":"[Semantical Error] line 0, col 935 near 'futi\_shoeSize': Error: Class Shopware\\Models\\Attribute\\OrderDetail has no association named futi\_shoeSize"}` pls help @ :shopware:

---

<div class="post-metadata">

**Author:** ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)\
**Post date:** [30. April 2013 um 06:52 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/6 "2013-04-30T06:52:29Z")

</div>

Hallo, hast du nach dem Hinzufügen des Attributs den Cache geleert? $metaDataCacheDoctrine = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCacheDoctrine-\>deleteAll(); Shopware()-\>Models()-\>generateAttributeModels(array(‘s\_order\_details\_attributes’)); Danach müsstest du mit “futiShoeSize” auf das Feld zugreifen können.

---

<div class="post-metadata">

**Author:** ![fulltime](https://avatars.discourse-cdn.com/v4/letter/f/7ab992/32.png) [@fulltime](https://forum.shopware.com/u/fulltime)\
**Post date:** [30. April 2013 um 08:29 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/7 "2013-04-30T08:29:41Z")

</div>

Mein aktueller Code sieht wie folgt aus: ` private function createAttributes() { $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); $this-\>Application()-\>Models()-\>addAttribute( 's\_order\_details\_attributes', 'futi', 'shoeSize', 'int(11)', true, null ); $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); $this-\>getEntityManager()-\>generateAttributeModels(array( 's\_order\_details\_attributes' )); }` Wenn ich in die Datei \engine\Shopware\Models\Attribute\OrderDetail.php schaue finde ich auch mein angelegtes Attribute Feld und die dazugehörigen Funktionen. ` /\*\* \* @var integer $futiShoeSize \* \* @ORM\Column(name="futi\_shoeSize", type="integer", nullable=true) \*/ protected $futiShoeSize; public function getFutiShoeSize() { return $this-\>futiShoeSize; } public function setFutiShoeSize($futiShoeSize) { $this-\>futiShoeSize = $futiShoeSize; return $this; } ` Ich glaube bald mehr das ich den Builder falsch benutze.

---

<div class="post-metadata">

**Author:** ![Oliver\_Skroblin](https://avatars.discourse-cdn.com/v4/letter/o/6bbea6/32.png) [@Oliver\_Skroblin](https://forum.shopware.com/u/Oliver_Skroblin)\
**Post date:** [30. April 2013 um 20:06 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/8 "2013-04-30T20:06:58Z")

</div>

Hi, an dem Query Builder brauchst du nichts zu ändern damit dein Attribute mit selektiert wird. Die Attribute aus s\_order\_details\_attributes werden bereits mit selektiert. ` $builder-\>from('Shopware\Models\Order\Order', 'orders'); $builder-\>leftJoin('orders.details', 'details') ... -\>leftJoin('details.attribute', 'detailAttribute') ....; ` Hier werden immer alle Daten aus den Models selektiert: ` $builder-\>select(array( 'orders', 'details', ... 'attribute', 'detailAttribute', .... ); ` Gruß Oliver

---

<div class="post-metadata">

**Author:** ![fulltime](https://avatars.discourse-cdn.com/v4/letter/f/7ab992/32.png) [@fulltime](https://forum.shopware.com/u/fulltime)\
**Post date:** [15. Mai 2013 um 10:05 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/9 "2013-05-15T10:05:01Z")

</div>

Ok aber wie rufe ich da nun den Wert ab? Mein aktueller Versuch sieht wie folgt aus view/detail/position.js `//{block name="backend/order/view/detail/position" append} Ext.override(Shopware.apps.Order.view.detail.Position, { getColumns: function() { var me = this; var columns = me.callOverridden(arguments); var columnSize= { header: '{s name=preferences/shoe\_size}Shoe size{/s}', dataIndex:'futiShoeSize', flex: 1 }; return Ext.Array.insert(columns, 8, [columnSize]); } }); //{/block}` Dieser Block funktioniert soweit auch. Nur das er mir überall den Wert 0 definiert. In der Datenbank sind aber andere Werte definiert. Ich habe noch die model/position.js `//{block name="backend/order/model/position/fields" append} { name: 'futiShoeSize', type: 'int' }, //{/block}` Danke im Voraus 🙂

---

<div class="post-metadata">

**Author:** ![sanymedia](https://avatars.discourse-cdn.com/v4/letter/s/b9bd4f/32.png) [@sanymedia](https://forum.shopware.com/u/sanymedia)\
**Post date:** [15. September 2013 um 01:22 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/10 "2013-09-15T01:22:17Z")

</div>

Hallo, Auch wenn der Beitrag etwas älter ist, aber Ich hatte gerade eben auch das Problem… Ursachen Lösung war Groß/Kleinschreibung beachten. Der genannte Snippet funktioniert jedenfalls 😉

---

<div class="post-metadata">

**Author:** ![AWinter](https://avatars.discourse-cdn.com/v4/letter/a/bb73d2/32.png) [@AWinter](https://forum.shopware.com/u/AWinter)\
**Post date:** [5. Dezember 2014 um 10:12 UTC](https://forum.shopware.com/t/querybuilder-bestellungen/12892/11 "2014-12-05T10:12:34Z")

</div>

> [@fulltime](#):
>
> Ok aber wie rufe ich da nun den Wert ab? Mein aktueller Versuch sieht wie folgt aus view/detail/position.js `//{block name="backend/order/view/detail/position" append} Ext.override(Shopware.apps.Order.view.detail.Position, { getColumns: function() { var me = this; var columns = me.callOverridden(arguments); var columnSize= { header: '{s name=preferences/shoe\_size}Shoe size{/s}', dataIndex:'futiShoeSize', flex: 1 }; return Ext.Array.insert(columns, 8, [columnSize]); } }); //{/block}` Dieser Block funktioniert soweit auch. Nur das er mir überall den Wert 0 definiert. In der Datenbank sind aber andere Werte definiert. Ich habe noch die model/position.js `//{block name="backend/order/model/position/fields" append} { name: 'futiShoeSize', type: 'int' }, //{/block}` Danke im Voraus 🙂
