# OrderQuery Erweitern

**URL:** <https://forum.shopware.com/t/orderquery-erweitern/15694>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [22. September 2013 um 10:14 UTC](https://forum.shopware.com/t/orderquery-erweitern/15694 "2013-09-22T10:14:12Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [22. September 2013 um 10:14 UTC](https://forum.shopware.com/t/orderquery-erweitern/15694/1 "2013-09-22T10:14:12Z")

</div>

Guten Morgen, ich versuche die OrderQuery um die Kundenatributte zu erweitern. Leider ohne Erfolg. Ich habe es die ganze Zeit über ein Plugin versucht, da es nicht ging benutze ich im Moment zum Test den Holzhammer und schreibe es direkt in die Files. Aber auch hier geht es nicht. Ich habe folgendes bearbeitet: engine/Shopware/Models/Order/Repository.php Hier habe ich „customerAttribute“ hinzugefügt und die Verknüpfung ` /\*\* \* Helper function to create the query builder for the "getOrdersQuery" function. \* This function can be hooked to modify the query builder of the query object. \* @param null $filters \* @param $orderBy \* @return \Doctrine\ORM\QueryBuilder \*/ public function getBackendOrdersQueryBuilder($filters = null, $orderBy = null) { $builder = $this-\>getEntityManager()-\>createQueryBuilder(); $builder-\>select(array( 'orders', 'details', 'customer', 'payment', 'billing', 'billingCountry', 'shop', 'dispatch', 'paymentStatus', 'orderStatus', 'billingAttribute', 'attribute', 'customerAttribute' )); $builder-\>from('Shopware\Models\Order\Order', 'orders'); $builder-\>leftJoin('orders.payment', 'payment') -\>leftJoin('orders.paymentStatus', 'paymentStatus') -\>leftJoin('orders.orderStatus', 'orderStatus') -\>leftJoin('orders.billing', 'billing') -\>leftJoin('orders.customer', 'customer') -\>leftJoin('orders.details', 'details') -\>leftJoin('billing.country', 'billingCountry') -\>leftJoin('orders.shop', 'shop') -\>leftJoin('orders.dispatch', 'dispatch') -\>leftJoin('billing.attribute', 'billingAttribute') -\>leftJoin('orders.attribute', 'attribute') -\>leftJoin('customer.attribute', 'customerAttribute'); if (!empty($filters)) { $builder = $this-\>filterListQuery($builder, $filters); } $builder-\>andWhere($builder-\>expr()-\>notIn('orders.status', array('-1'))); $builder-\>andWhere('orders.number IS NOT NULL'); if (!empty($orderBy)) { //add order by path $builder-\>addOrderBy($orderBy); } return $builder; } ` Das Ganze wird ja in Backend Order Controller (getList)aufgerufen: engine/Shopware/Models/Order/Order.php Hier habe ich in die Foreach eine Dumpausgabe integriert, welche mir die Werte in eine Textfile schreibt. ` protected function getList($filter, $sort, $offset, $limit) { try { if (empty($sort)) { $sort = array(array('property' =\> 'orders.orderTime', 'direction' =\> 'DESC')); } else { $sort[0]['property'] = 'orders.' . $sort[0]['property']; } $query = $this-\>getRepository()-\>getBackendOrdersQuery($filter, $sort, $offset, $limit); $query-\>setHydrationMode(\Doctrine\ORM\AbstractQuery::HYDRATE\_ARRAY); $paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query); //returns the total count of the query $total = $paginator-\>count(); //returns the customer data $orders = $paginator-\>getIterator()-\>getArrayCopy(); foreach($orders as $key =\> &$order) { $tmpRes = ""; $datei = fopen("a\_log.txt","a+"); foreach($order as $schluessel =\> $wert) $tmpRes.= $schluessel.": ".$wert."\n"; fwrite($datei, $tmpRes. "\n" . "-------------------------------------------------------------------------" . "\n"); fclose($datei); .... ` Leider tauchen meine Kunden Attribute nicht auf. Lösche ich hingegen eine bestehende Verlinkung (attributes) so fehlen diese Felder nachher in dem Array. Könnt ihr mir sagen wo mein Fehler liegt? Danke

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [23. September 2013 um 09:05 UTC](https://forum.shopware.com/t/orderquery-erweitern/15694/2 "2013-09-23T09:05:01Z")

</div>

okay, ich denke ich muss das Model noch erweitern: ‚Shopware\Models\Order\Order‘ Hat mir hierzu jemand ein Beispiel? Danke

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [23. September 2013 um 15:14 UTC](https://forum.shopware.com/t/orderquery-erweitern/15694/3 "2013-09-23T15:14:52Z")

</div>

Je länger ich hier rumprobiere um so unverständlich wird es für mich. Das Model erweiter ich ja eig. mit meiner Left Anweisung, oder? Daher sollte es doch eig. gehen. Shopware, habt ihr mir nicht einen Tipp?

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [25. September 2013 um 08:03 UTC](https://forum.shopware.com/t/orderquery-erweitern/15694/4 "2013-09-25T08:03:42Z")

</div>

Guten Morgen, hat mir dazu niemand eine Info? Ich habe das Problem nun übergangen, in dem ich das Array einfach dirkt im Controller erweitere. Aber schöner wäre es sicher direkt über das Model gewesen. Daher bin ich immer noch an einer Lösung interessiert.

---

<div class="post-metadata">

**Author:** ![mmmichael](https://avatars.discourse-cdn.com/v4/letter/m/ac91a4/32.png) [@mmmichael](https://forum.shopware.com/u/mmmichael)\
**Post date:** [25. September 2013 um 13:09 UTC](https://forum.shopware.com/t/orderquery-erweitern/15694/5 "2013-09-25T13:09:25Z")

</div>

Hallo, bin da noch ganz am Anfang, aber du kannst ja erst einmal via After-Hook den Querybuilder unter getBackendOrdersQueryBuilder erweitern und muss dafür dann nicht in den Core. Mehr kann ich aktuell leider beitragen ;-). Gruß, Michael

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [25. September 2013 um 13:23 UTC](https://forum.shopware.com/t/orderquery-erweitern/15694/6 "2013-09-25T13:23:09Z")

</div>

das habe ich ja gemacht 😉 da es aber nicht ging. bin ich direkt an die core files.

---

<div class="post-metadata">

**Author:** ![kapeha](https://avatars.discourse-cdn.com/v4/letter/k/ce7236/32.png) [@kapeha](https://forum.shopware.com/u/kapeha)\
**Post date:** [4. Januar 2014 um 13:24 UTC](https://forum.shopware.com/t/orderquery-erweitern/15694/7 "2014-01-04T13:24:45Z")

</div>

Bist Du hier weitergekommen? Das hinzufügen der CustomerAttribute über den Hook funktioniert bei mir und sie landen auch in order[‚customer‘][‚attribute‘]. Allerdings kommt dann das Problem in der obigen Funktion „getList“: Es wird eine zusätzliche Abfrage „$additionalOrderDataQuery“ ausgeführt und das Ergebnis mit Array\_merge in $order geschrieben. Dadurch wird $order[‚customer‘] überschrieben und die Attribute sind wieder weg. Warum werden hier Daten doppelt abgefragt? Leider lässt sich auch „getBackendAdditionalOrderDataQuery“ nicht mit einem Hook abfangen, da es ja nicht den Builder sondern das fertige Query zurückgibt. Wie könnte ich erreichen, dass die CustomerAttribute abgefragt und nicht wieder überschrieben werden?
