# Model Function ändern

**URL:** https://forum.shopware.com/t/model-function-andern/26959
**Category:** Shopware 3.5
**Tags:** programming
**Created:** [6. Mai 2015 um 15:04 UTC](https://forum.shopware.com/t/model-function-andern/26959 "2015-05-06T15:04:04Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![eierund](https://avatars.discourse-cdn.com/v4/letter/e/e8c25b/32.png) [@eierund](https://forum.shopware.com/u/eierund)
#### Post date: [6. Mai 2015 um 15:04 UTC](https://forum.shopware.com/t/model-function-andern/26959/1 "2015-05-06T15:04:04Z")

</div>

Hallo, ich würde gerne eine Funktion aus der Models/Articles/Repository.php ändern. Ich ahbe gelesen, dass man dies updatesicher anstellen kann mit einem Hook. Über der Funktion selbst steht auch, das die Funktion mit einem Hook erweitert werden kann. Nun habe ich mir die Doku angesehen aber komme auf keinen grünen Zweig. Um ehrlich zu sein, ich verstehe es überhaupt nicht. Die erste grundlegende Frage wäre: Ich möchte in der Funktion lediglich einen Wert ändern. Nichts davor oder dahinter ausführen. Ist das überhaupt möglich? Wäre dafür die „Update-Hook“ von Nöten? Freue mich auf Rückmeldung.

---

<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: [6. Mai 2015 um 15:33 UTC](https://forum.shopware.com/t/model-function-andern/26959/2 "2015-05-06T15:33:41Z")

</div>

Dieser FAQ Beitrag sollte für dich interessant sein: [sonstiges-f58/faq-haufig-gestellte-fragen-t24425.html#p109837](http://forum.shopware.com/sonstiges-f58/faq-haufig-gestellte-fragen-t24425.html#p109837) In einem der Beispiele wird sogar ein hook auf eine repository gezeigt: [http://wiki.shopware.com/Schuhgroessen- … 2\_868.html](http://wiki.shopware.com/Schuhgroessen-Erweiterung%5C_detail%5C_1052%5C_868.html) Viele Grüße

---

<div class="post-metadata">

### Author: ![eierund](https://avatars.discourse-cdn.com/v4/letter/e/e8c25b/32.png) [@eierund](https://forum.shopware.com/u/eierund)
#### Post date: [6. Mai 2015 um 16:48 UTC](https://forum.shopware.com/t/model-function-andern/26959/3 "2015-05-06T16:48:08Z")

</div>

Verstehe ich überhaupt nicht. Ich habe das mal so erstellt, aber was passiert mit der Funktion? Wird die komplett darein kopiert? [code]\<?php class Shopware\_Plugins\_Frontend\_variantbackend\_Bootstrap  
extends Shopware\_Components\_Plugin\_Bootstrap  
{

```
public function getCapabilities()
{
    return array(
        'install' => true, 'update' =\> true, 'enable' =\> true ); } public function getLabel() { return 'variantbackend'; } public function getVersion() { return '1.0.0'; } public function getInfo() { return array( 'version' =\> $this-\>getVersion(), 'autor' =\> 'SM', 'copyright' =\> '© 2015 ', 'label' =\> $this-\>getLabel(), 'source' =\> 'Community', 'description' =\> '', 'license' =\> '', 'support' =\> '', 'link' =\> 'https://www.' ); } public function install() { $this-\>subscribeEvents(); return array('success' =\> true, 'invalidateCache' =\> array('frontend')); } public function uninstall() { return true; } private function subscribeEvents() { $this-\>subscribeEvent( 'Shopware\Models\Articles\Repository::getListQueryBuilder::replace', 'replacegetDetailsByIdsQueryBuilder' ); } /\*\* \* Hooks the getListQueryBuilder method of the customer repository. \* Additionally selects our own attributes \* \* @param Enlight\_Hook\_HookArgs $arguments \*/ public function replacegetDetailsByIdsQueryBuilder(Enlight\_Hook\_HookArgs $arguments) { $builder = $this-\>getEntityManager()-\>createQueryBuilder(); $builder-\>select(array('details','attribute','prices','customerGroup','configuratorOptions')) -\>from('Shopware\Models\Article\Detail', 'details') -\>leftJoin('details.configuratorOptions', 'configuratorOptions') -\>leftJoin('details.prices', 'prices') -\>leftJoin('details.attribute', 'attribute') -\>innerJoin('prices.customerGroup', 'customerGroup') -\>where('details.id IN (?1)') -\>setParameter(1, $ids); if ($sort !== null && !empty($sort)) { $builder-\>addOrderBy($sort); } else { $builder-\>addOrderBy('details.additionalText', 'ASC');//Änderung } $builder-\>addOrderBy('customerGroup.id', 'ASC') -\>addOrderBy('prices.from', 'ASC'); return $builder; } } [/code]
```

---

<div class="post-metadata">

### Author: ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)
#### Post date: [6. Mai 2015 um 17:11 UTC](https://forum.shopware.com/t/model-function-andern/26959/4 "2015-05-06T17:11:30Z")

</div>

Hi, geht der Programmfluss denn durch deine Callback-Methode? Versuch mal zusätzlich mit $args-\>setReturn($builder) am Ende. Hast du das Plugin nach Hinzugfügen des Hooks neu installiert? Ist hier zwingend ein Replace-Hook nötig? “after” wäre besser, da kannst du dir am Anfang der Methode mit $args-\>getReturn() das Ergebnis der Original-Methode hohlen. Besten Gruß, Daniel

---

<div class="post-metadata">

### Author: ![eierund](https://avatars.discourse-cdn.com/v4/letter/e/e8c25b/32.png) [@eierund](https://forum.shopware.com/u/eierund)
#### Post date: [6. Mai 2015 um 17:22 UTC](https://forum.shopware.com/t/model-function-andern/26959/5 "2015-05-06T17:22:05Z")

</div>

Hallo, bin jetzt verwirrt. public function replacegetDetailsByIdsQueryBuilder(Enlight\_Hook\_HookArgs $arguments) beinhaltet exakt den gleichen Code wie original, nur dort wo Änderung markiert ist findet eine Änderung statt. So funktioniert das ja scheinbar nicht.

---

<div class="post-metadata">

### Author: ![eierund](https://avatars.discourse-cdn.com/v4/letter/e/e8c25b/32.png) [@eierund](https://forum.shopware.com/u/eierund)
#### Post date: [6. Mai 2015 um 17:51 UTC](https://forum.shopware.com/t/model-function-andern/26959/6 "2015-05-06T17:51:16Z")

</div>

Ich werde mal noch etwas rumprobieren, danke erstmal. Eine kurze Frage noch. Wie kann ich testen ob überhaupt etwas passiert? Wenn die Funktion nicht korrekt läuft werden halt die Varianten nicht sortiert, aber ich muss doch irgendwie auf die Ergebnisse zugreifen können die mir $args-\>getReturn() liefert.

---

<div class="post-metadata">

### Author: ![eierund](https://avatars.discourse-cdn.com/v4/letter/e/e8c25b/32.png) [@eierund](https://forum.shopware.com/u/eierund)
#### Post date: [7. Mai 2015 um 11:47 UTC](https://forum.shopware.com/t/model-function-andern/26959/7 "2015-05-07T11:47:06Z")

</div>

Noch einmal eine kurze Frage, ich sitze da jetzt schon Stunden daran, es wird langsam 🙂 Ich habe jetzt ein Event registriert, es soll in der Funktion getDetailsByIdsQueryBuilder ein Wert geändert werden. Hier der Hook: [quote]public function replacegetDetailsByIdsQueryBuilder(Enlight\_Hook\_HookArgs $arguments) { $builder = $arguments-\>getReturn(); $builder-\>addOrderBy(‘details.additionalText’, ‘ASC’); $arguments-\>setReturn($builder); }[/quote] $builder-\>addOrderBy(‘details.id’, ‘ASC’); soll geändert werden auf $builder-\>addOrderBy(‘details.additionalText’, ‘ASC’); Ich sehe nicht, warum es nicht geht. Habe es auch mit einem After Hook versucht.☹

---

<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: [7. Mai 2015 um 11:53 UTC](https://forum.shopware.com/t/model-function-andern/26959/8 "2015-05-07T11:53:58Z")

</div>

Mit addOrderBy() fügst du nur eine zusätzliche, zweitrangige Sortierung hinzu. Du suchst orderBy(), um die aktuell hinterlegten Sortierungen zu ersetzen. Siehe auch: [http://doctrine-orm.readthedocs.org/en/ … ilder.html](http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html) Viele Grüße

---

<div class="post-metadata">

### Author: ![eierund](https://avatars.discourse-cdn.com/v4/letter/e/e8c25b/32.png) [@eierund](https://forum.shopware.com/u/eierund)
#### Post date: [7. Mai 2015 um 12:20 UTC](https://forum.shopware.com/t/model-function-andern/26959/9 "2015-05-07T12:20:54Z")

</div>

Ah prima, mit orderBy überschreibe ich also jeder Sortierung, noch ebsser, vielen Dank! Leider funktioniert das auch nicht. Ich habe auch hier wieder replace und after Hook probiert :oops: [quote]$builder = $arguments-\>getReturn(); $builder-\>orderBy(‘details.additionalText’, ‘ASC’); $arguments-\>setReturn($builder); [/quote] Es passiert nichts. Registriert ist der Hook doch korrekt?? [quote] private function subscribeEvents() { $this-\>subscribeEvent( ‘Shopware\Models\Articles\Repository::getDetailsByIdsQueryBuilder::replace’, ‘replacegetDetailsByIdsQueryBuilder’ ); } [/quote]

---

<div class="post-metadata">

### Author: ![eierund](https://avatars.discourse-cdn.com/v4/letter/e/e8c25b/32.png) [@eierund](https://forum.shopware.com/u/eierund)
#### Post date: [7. Mai 2015 um 12:36 UTC](https://forum.shopware.com/t/model-function-andern/26959/10 "2015-05-07T12:36:00Z")

</div>

Ok, es funktioniert nun, super! In der Registrierung war ein “s” zuviel 😃
