# ModelReposity - Order- Funktion manipulieren

**URL:** <https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [19. Februar 2014 um 08:54 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551 "2014-02-19T08:54:08Z")\
**Posts on this page:** 14\
**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:** [19. Februar 2014 um 08:54 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/1 "2014-02-19T08:54:08Z")

</div>

Guten Morgen, ich will die Funktion filterListQuery() in [https://github.com/ShopwareAG/shopware- … sitory.php](https://github.com/ShopwareAG/shopware-4/blob/master/engine/Shopware/Models/Order/Repository.php) erweitern. Ich brauche bei der Filterung einen zusätzlichen Wert (Kundennummer): [quote] $expr-\>like(‘billing.number’, ‘?3’), [/quote] Hat hier schon mal jemand was geändert oder hat mir einen Tipp? Mit dem Querybuilder habe ich mich bis jetzt noch nicht so beschäft und ich finde auch keine Einstiegshilfe. Danke

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [19. Februar 2014 um 10:10 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/2 "2014-02-19T10:10:57Z")

</div>

Hier ein wenig Lektüre zur Theorie: [http://wiki.shopware.de/Shopware-4-Quer … \_1076.html](http://wiki.shopware.de/Shopware-4-QueryBuilder%5C_detail%5C_1076.html) [http://wiki.shopware.de/Selektierung-vo … l\_879.html](http://wiki.shopware.de/Selektierung-von-Daten%5C_detail%5C_879.html) Ein paar praktische Beispiele zur Nutzung: [http://wiki.shopware.de/Einsteiger-Schu … 2\_871.html](http://wiki.shopware.de/Einsteiger-Schuhgroessen-Erweiterung%5C_detail%5C_1052%5C_871.html) [http://wiki.shopware.de/Fortgeschritten … \_1028.html](http://wiki.shopware.de/Fortgeschrittene-Artikellisting-mit-Variantenwechsel%5C_detail%5C_1028.html) Und immer wieder eine gute Anlaufstelle bei offenen Fragen: [http://docs.doctrine-project.org/projec … ilder.html](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html) Falls du konkrete Fragen hast, dann kannst du die gerne stellen und ich werde mein bestes versuchen zu helfen 🙂 Viele Grüße

---

<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:** [19. Februar 2014 um 20:55 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/3 "2014-02-19T20:55:24Z")

</div>

Danke für dene Links. Die haben mir schon sehr weitergeholfen. Nun bin ich mir aber noch nicht ganz sicher, ob der Weg wie ich es nun machen will korrekt ist. Ich dachte nun, ich hooke die Methode und hole mir den fertigen Builder. Also replace. Nun hat dieser ja schon die andWhere Angaben im Original erstellt. ` $builder-\>andWhere( $expr-\>orX( $expr-\>like('orders.number', '?1'), $expr-\>like('orders.invoiceAmount', '?1'), $expr-\>like('orders.transactionId', '?1'), $expr-\>like('payment.description', '?1'), $expr-\>like('dispatch.name', '?1'), $expr-\>like('orderStatus.description', '?1'), $expr-\>like('paymentStatus.description', '?1'), $expr-\>like('orders.orderTime', '?2'), $expr-\>like('billing.company', '?3'), $expr-\>like('billing.lastName', '?3'), $expr-\>like('billing.firstName', '?3'), $expr-\>like('shop.name', '?3'), $expr-\>like('orders.comment', '?3'), $expr-\>like('orders.customerComment', '?3'), $expr-\>like('orders.internalComment', '?3') ) ); ` Wenn ich nun erneut andWhere mache, so habe ich es ja doppelt, oder wird das überschrieben? Andernfalls muss ich es über replace machen und die ganze Methode überschreiben. Diese Mögichkeit wird sicher auf jeden Fall gehen. Was meinst du? Ist es über :after realisierbar? P.S. ich will hier kein fertigen Code, sondern nur über Best Practice sprechen 😉 Danke dir

---

<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:** [20. Februar 2014 um 09:37 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/4 "2014-02-20T09:37:37Z")

</div>

HI, also mit after komme ich nicht weiter. Ich will nun das ganze Replace, komme aber nicht an den Builder ran: ` $this-\>subscribeEvent( 'Shopware\Models\Order\Repository::filterListQuery::replace', 'afterfilterListQueryReplace' ); ` ` /\*\* \* Hooks the filterList method of the order repository. \* Manipulate Filter \* \* @param Enlight\_Hook\_HookArgs $arguments \*/ public function afterfilterListQueryReplace(Enlight\_Hook\_HookArgs $arguments) { $builder = $arguments-\>getBuilder(); $filters = $arguments-\>getFilters(); //$builder = $arguments-\>get('builder'); //$filters = $arguments-\>get('filters'); $expr = Shopware()-\>Models()-\>getExpressionBuilder(); if (!empty($filters)) { foreach ($filters as $filter) { if (empty($filter['property']) || $filter['value'] === null || $filter['value'] === '') { continue; } switch ($filter['property']) { case "free": $builder-\>andWhere( $expr-\>orX( $expr-\>like('orders.number', '?1'), $expr-\>like('orders.invoiceAmount', '?1'), $expr-\>like('orders.transactionId', '?1'), $expr-\>like('payment.description', '?1'), $expr-\>like('dispatch.name', '?1'), $expr-\>like('orderStatus.description', '?1'), $expr-\>like('paymentStatus.description', '?1'), $expr-\>like('orders.orderTime', '?2'), $expr-\>like('billing.company', '?3'), $expr-\>like('billing.lastName', '?3'), $expr-\>like('billing.firstName', '?3'), $expr-\>like('billing.number', '?3'), $expr-\>like('shop.name', '?3'), $expr-\>like('orders.comment', '?3'), $expr-\>like('orders.customerComment', '?3'), $expr-\>like('orders.internalComment', '?3') ) ); $builder-\>setParameter(1, $filter['value'] . '%'); $builder-\>setParameter(2, '%' . $filter['value'] ); $builder-\>setParameter(3, '%' . $filter['value'] . '%'); break; case "from": $tmp = new \DateTime($filter['value']); $builder-\>andWhere($expr-\>gte('orders.orderTime', $tmp-\>format('Ymd'))); break; case "to": $tmp = new \Zend\_Date($filter['value']); $tmp-\>setHour('23'); $tmp-\>setMinute('59'); $tmp-\>setSecond('59'); $builder-\>andWhere('orders.orderTime \<= :orderTimeTo'); $builder-\>setParameter('orderTimeTo', $tmp-\>get('yyyy-MM-dd HH:mm:ss')); break; case 'details.articleNumber': $builder-\>andWhere('details.articleNumber LIKE :articleNumber'); $builder-\>setParameter('articleNumber', $filter['value'] . "%"); break; case 'customer.groupKey': $builder-\>andWhere($expr-\>eq($filter['property'], "'" . $filter['value'] . "'")); break; default: $builder-\>andWhere($expr-\>eq($filter['property'], $filter['value'])); } } } return $builder; } ` Fehler: Fatal error: Call to a member function andWhere() on a non-object in /kunden/117539\_78141/webseiten/42final/engine/Shopware/Models/Order/Repository.php on line 287 Hier wäre ich dir für einen Tipp sehr dankbar.

---

<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. Februar 2014 um 10:01 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/5 "2014-02-22T10:01:38Z")

</div>

Hat niemand eine Idee? Warum komme ich nicht an $builder ran? Gesendet von meinem iPhone mit Tapatalk

---

<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:** [22. Februar 2014 um 13:24 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/6 "2014-02-22T13:24:28Z")

</div>

Hallo, nur als Idee: Musst Du nicht … `$builder = $arguments-\>get('builder'); $filters = $arguments-\>get('filters');` … anstatt … `$builder = $arguments-\>getBuilder(); $filters = $arguments-\>getFilters();` … schreiben? Hab selbst mal an einer ähnlichen Stelle gehangen, ohne Lösung jedoch: [programmierung-f56/orm-querybilder-gegenstuck-von-andwhere-t15237.html?hilit=andWhere#p69919](http://forum.shopware.de/programmierung-f56/orm-querybilder-gegenstuck-von-andwhere-t15237.html?hilit=andWhere#p69919) Gruß, Michael

---

<div class="post-metadata">

**Author:** ![Martin\_Weinmayr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/martin_weinmayr/32/13016_2.png) [@Martin\_Weinmayr](https://forum.shopware.com/u/Martin_Weinmayr)\
**Post date:** [22. Februar 2014 um 14:37 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/7 "2014-02-22T14:37:06Z")

</div>

Is grade Wurscht, sollte beides gehen …

---

<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. Februar 2014 um 17:41 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/8 "2014-02-22T17:41:21Z")

</div>

Hatte beides probiert. Geht beides nicht! Gesendet von meinem iPhone mit Tapatalk

---

<div class="post-metadata">

**Author:** ![Martin\_Weinmayr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/martin_weinmayr/32/13016_2.png) [@Martin\_Weinmayr](https://forum.shopware.com/u/Martin_Weinmayr)\
**Post date:** [22. Februar 2014 um 17:47 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/9 "2014-02-22T17:47:22Z")

</div>

Was hat builder für einen Zustand? Null?

---

<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. Februar 2014 um 17:56 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/10 "2014-02-22T17:56:22Z")

</div>

nein, ich denke er ist schon irgendwie vorhanden. Wenn ich mit var\_dump $builder ausgebe, so hängt sich der Firebox auf. Lädt ewig und stürzt ab. Aber auf andWhere() kann ich eben nicht zugreifen.

---

<div class="post-metadata">

**Author:** ![Tr0nYx](https://avatars.discourse-cdn.com/v4/letter/t/eb9ed0/32.png) [@Tr0nYx](https://forum.shopware.com/u/Tr0nYx)\
**Post date:** [22. Februar 2014 um 19:34 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/11 "2014-02-22T19:34:07Z")

</div>

Event\_Hook\_HookArgs hat kein get oder getBuilder function. Du musst glaub ich auch nicht den builder von der gehookten class nehmen. Dürfte mit $builder = Shopware()-\>Models()-\>createQueryBuilder(); gehen Gesendet von meinem HTC One mit Tapatalk

---

<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. Februar 2014 um 14:02 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/12 "2014-02-23T14:02:20Z")

</div>

Hi, das geht auch nicht. Jetzt fällt mir aber was auf. Der Fehler tritt nicht in meinem Code auf, sondern in der Repositoryy: Fatal error: Call to a member function andWhere() on a non-object in webseiten/42final/engine/Shopware/Models/Order/Repository.php on line 287 Anbei ein Screen. die Funktion in 285 hooke ich ja per Replace. Siehe oben. Der Fehler kommt dann beim Aufruf von anWhere() in Line 287. Hat dazu noch jemand eine Idee?

---

<div class="post-metadata">

**Author:** ![Martin\_Weinmayr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/martin_weinmayr/32/13016_2.png) [@Martin\_Weinmayr](https://forum.shopware.com/u/Martin_Weinmayr)\
**Post date:** [23. Februar 2014 um 14:20 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/13 "2014-02-23T14:20:12Z")

</div>

Nicht Return builder sondern atteibute-\>setreturn(builder) So glaube ich…

---

<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. Februar 2014 um 14:31 UTC](https://forum.shopware.com/t/modelreposity-order-funktion-manipulieren/18551/14 "2014-02-23T14:31:03Z")

</div>

[quote=„Martin Weinmayr“]Nicht Return builder sondern atteibute-\>setreturn(builder) So glaube ich…[/quote] oh man… danke. Manchmal sieht man den Wald vor lauter Bäumen nicht. Jetzt geht es. Und den Bilder bekomme ich wie anfangs geschrieben über $builder = $arguments-\>getBuilder(); oder $builder = $arguments-\>get(‚builder‘); Besten dank.
