# querybuilder für suche

**URL:** https://forum.shopware.com/t/querybuilder-fur-suche/41444
**Category:** Programmierung
**Created:** [17. November 2016 um 14:54 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444 "2016-11-17T14:54:37Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![guen](https://avatars.discourse-cdn.com/v4/letter/g/c37758/32.png) [@guen](https://forum.shopware.com/u/guen)
#### Post date: [17. November 2016 um 14:54 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444/1 "2016-11-17T14:54:37Z")

</div>

Hallo

ich hätte eine Frage. Wo findet man eigentlich den Querybuilder für die Suchfunktion von Shopware? Ich möchte dort noch einen zusätzlichen join einbringen, um eine Artikelkategorie mittels Abfrage eines Freitextfeldes in der Datenbank auszuschließen. Vielleicht hat dazu auch jemand Vorschläge.

Viele Grüße

Guen

---

<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: [17. November 2016 um 15:00 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444/2 "2016-11-17T15:00:12Z")

</div>

Hi,

da hilft dir schon die ProductAttributeCondition, musst also gar keinen Query schreiben, sondern nur die entsprechende Condition einbringen, vgl.&nbsp;[SearchBundle](https://developers.shopware.com/developers-guide/shopware-5-search-bundle/#list-of-conditions-and-sortings)

Daniel

---

<div class="post-metadata">

### Author: ![guen](https://avatars.discourse-cdn.com/v4/letter/g/c37758/32.png) [@guen](https://forum.shopware.com/u/guen)
#### Post date: [17. November 2016 um 15:01 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444/3 "2016-11-17T15:01:41Z")

</div>

Wow, danke für die schnelle Antwort, probiert ich gleich mal aus.

---

<div class="post-metadata">

### Author: ![guen](https://avatars.discourse-cdn.com/v4/letter/g/c37758/32.png) [@guen](https://forum.shopware.com/u/guen)
#### Post date: [17. November 2016 um 16:48 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444/4 "2016-11-17T16:48:31Z")

</div>

Komme damit nicht so klar. Ich habe in der Tabelle s\_articles\_attributes die Spalte suche. Die Shopwaresuche soll nur Artikel bei der Suche berücksichtigen, die dort eine 1 drin haben.

Ich müsste also einfach in der Shopsuche den Suchquery um einen

```
LEFT JOIN `s_articles_attributes` ON (`s_articles`.id = `s_articles_attributes`.articleId)

```

erweitern, damit die Attribute und Freitextfelder auch berücksichtigt werden, und dann die Condition

```
`s_articles_attributes`.suche = 1

```

hinzufügen.

Nur wo schreibe ich das rein?

---

<div class="post-metadata">

### Author: ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)
#### Post date: [17. November 2016 um 19:16 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444/5 "2016-11-17T19:16:51Z")

</div>

Nein wie [@Daniel Nögel]([http://forum.shopware.com/profile/4010/Daniel](http://forum.shopware.com/profile/4010/Daniel) Nögel „Daniel Nögel“)‍ schon gesagt hast kannst du mir der&nbsp;ProductAttributeCondition arbeiten:

Für die Produktsuche gibt es das [„Shopware\_SearchBundle\_Create\_Search\_Criteria“ Event](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/StoreFrontCriteriaFactory.php#L117)&nbsp;in der&nbsp;StoreFrontCriteriaFactory. Da kannst du der Criteria eine neue Condition hinzufügen. Das wäre dann - wie gesagt - die [ProductAttributeCondition](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/Condition/ProductAttributeCondition.php#L69).

```
use Shopware\Bundle\SearchBundle\Condition\ProductAttributeCondition;

/* ... */ 

/* Event Listener Funktion */
public function onCreateSearchCriteria($args) {
    $criteria = $args->get('criteria');
    // hier fügen wir die Condition "Freitextfeld namens 'suche' muss den Wert 1 haben" hinzu
    $criteria->addCondition(
      new ProductAttributeCondition('suche',ProductAttributeCondition::OPERATOR_EQ,1)
    );
}

```

(Code nicht getestet. Syntaxfehler ggf. ausbessern&nbsp; ![Wink](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/wink.png "Wink"))

Viele Grüße

---

<div class="post-metadata">

### Author: ![guen](https://avatars.discourse-cdn.com/v4/letter/g/c37758/32.png) [@guen](https://forum.shopware.com/u/guen)
#### Post date: [18. November 2016 um 08:18 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444/6 "2016-11-18T08:18:42Z")

</div>

Funktioniert leider nicht. Die Suche findet immer noch alle Artikel.

Habe es erst so versucht, dass ich in der StoreFrontCriteriaFactory.php die use-Anweisung hinzügefügt habe und dann nach der function createSearchCriteria die neue function&nbsp; onCreateSearchCriteria eingefügt habe. Es kam keine Fehlermeldung, das Suchkriterium hat aber keine Auswirkung. Auch die Plugin-Variante klappt nicht.

Das Suchkriterium wird nicht ausgeführt. Woran könnte das liegen?

---

<div class="post-metadata">

### Author: ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)
#### Post date: [18. November 2016 um 08:32 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444/7 "2016-11-18T08:32:15Z")

</div>

Nein du darfst auf keinen Fall die original Dateien bearbeiten! ![Gasp](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/gasp.png "Gasp")&nbsp;Du musst das in ein Plugin auslagern. Und die Eventlistener Funktion wird natürlich nicht aufgerufen, wenn du sie zuvor nicht auf das von mir genannten Event registrierst. Schau dir am besten mal die Anleitungen unter [http://developers.shopware.com](http://developers.shopware.com) an. Speziell diese hier&nbsp;[Shopware events](https://developers.shopware.com/developers-guide/event-guide/) ![Wink](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/wink.png "Wink").

Viele Grüße

---

<div class="post-metadata">

### Author: ![guen](https://avatars.discourse-cdn.com/v4/letter/g/c37758/32.png) [@guen](https://forum.shopware.com/u/guen)
#### Post date: [18. November 2016 um 09:13 UTC](https://forum.shopware.com/t/querybuilder-fur-suche/41444/8 "2016-11-18T09:13:08Z")

</div>

Vielen Dank simkli, es funktioniert!!

Somit habe ich eben mit deiner Hilfe mein erstes Plugin geschrieben ![Smile](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/smile.png "Smile")

Jetzt muss ich allerdings die Anpassung auch noch in der Live-Suche machen, dort hat das anscheinend keine Auswirkung.

Kannst du mir bitte nochmal einen Tipp geben, wo ich die finde?

&nbsp;

EDIT: Ist das das Event Shopware\_SearchBundle\_Create\_Ajax\_Search\_Criteria? Reicht es dann aus, wenn ich das Event noch einfach hinzufüge?

Nochmal Edit: gelöst ![Smile](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/smile.png "Smile"). Danke für Eure Hilfe ![Thumb-Up](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/thumb-up.png "Thumb-Up")

&nbsp;
