# API Filter

**URL:** <https://forum.shopware.com/t/api-filter/61326>\
**Category:** Allgemein\
**Created:** [26. August 2019 um 17:06 UTC](https://forum.shopware.com/t/api-filter/61326 "2019-08-26T17:06:42Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [26. August 2019 um 17:06 UTC](https://forum.shopware.com/t/api-filter/61326/1 "2019-08-26T17:06:42Z")

</div>

Hallo,

die API-Filter-Funktion wird hier ja im Ansatz erklärt:

> **[API guide](https://docs.shopware.com/en/shopware-platform-dev-en/admin-api-guide?category=shopware-platform-dev-en%2Fapi)**

Dort steht:

**The list routes supports both data filtering via GET parameter and POST parameter for more complex queries. Simple queries can be made via GET parameters.**

Wie funktioniert denn eine Suche über POST? An welche Adresse geht die POST-Suche? Oder mal konkret gefragt: Wie kann ich mir alle Artikel anzeigen lassen, welche KEINE EAN-Nummer haben?

Ich denke, das geht nur über die POST-Suche, oder?

---

<div class="post-metadata">

**Author:** ![Krispin](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/krispin/32/12849_2.png) [@Krispin](https://forum.shopware.com/u/Krispin)\
**Post date:** [27. August 2019 um 06:42 UTC](https://forum.shopware.com/t/api-filter/61326/2 "2019-08-27T06:42:38Z")

</div>

Guten Morgen,

den API-Endpunkt den du suchst lautet:&nbsp;api/v1/search/product  
Hier kannst du dann per POST-Request auf die Daten abfragen.  
Zum Beispiel dies was du suchst, würde lauten:

```
{
    "filter":[
        {
            "type":"equals",
            "field":"product.ean",
            "value":null
        }
    ]
}

```

Diese Abfragen kannst du natürlich besser über die Shopware-Logik machen, aber per Hand kannst du das JSON natürlich auch erstellen.  
Hierfür musst du die Filter einzeln angeben.

Über GET kannst du nur Abfragen stellen, die einen Wert haben, wie z.B. die Abfrage auf eine bestimmte EAN-Nummer:

api/v1/product?filter[product.ean]=EAN-100

Gruß

Krispin

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [27. August 2019 um 07:23 UTC](https://forum.shopware.com/t/api-filter/61326/3 "2019-08-27T07:23:40Z")

</div>

Hallo Krispin,

vielen Dank für Deine Antwort - super, genau danach habe ich gesucht.

Eine Frage habe ich aber noch: Kann man auch nach werten \>= oder \<= suchen ?

Z.B.: Zeige alle Produkte mit Lagerbestand \< 10

Wie würde das aussehen?

---

<div class="post-metadata">

**Author:** ![Krispin](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/krispin/32/12849_2.png) [@Krispin](https://forum.shopware.com/u/Krispin)\
**Post date:** [27. August 2019 um 08:02 UTC](https://forum.shopware.com/t/api-filter/61326/4 "2019-08-27T08:02:24Z")

</div>

Hi,

kein Problem, für solche Anfragen gibt es den RangeFilter (diesen findest du auch im Core unter: Framework/DataAbstractionLayer/Search/Filter/RangeFilter.php).  
Diesen kann&nbsp;man dann zum Beispiel so nutzen:  
&nbsp;

```
{
    "filter":[
        {
            "type":"range",
            "field":"product.stock",
            "parameters":{
        		"lt":10
            }
        }
    ]
}

```

Die Parameter geben dann an, welche Range du haben möchtest, es gibt die Typen: \< (lt), \> (gt), \<= (lte),&nbsp; \>= (gte).  
&nbsp;

Gruß

Krispin

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [27. August 2019 um 08:21 UTC](https://forum.shopware.com/t/api-filter/61326/5 "2019-08-27T08:21:14Z")

</div>

Perfekt, funktioniert - vielen Dank!!!

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [31. August 2019 um 15:55 UTC](https://forum.shopware.com/t/api-filter/61326/6 "2019-08-31T15:55:50Z")

</div>

Eine Frage noch: Wie funktioniert eine like-Abfrage?

Beispiel: EAN like „492542\*“

---

<div class="post-metadata">

**Author:** ![Krispin](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/krispin/32/12849_2.png) [@Krispin](https://forum.shopware.com/u/Krispin)\
**Post date:** [2. September 2019 um 06:21 UTC](https://forum.shopware.com/t/api-filter/61326/7 "2019-09-02T06:21:11Z")

</div>

Guten Morgen,

dazu gibt es dann den ContrainsFilter, z.B. eine Abfrage auf den Produktnamen, in dem ein „artikel“ stehen muss:

```
{
    "filter":[
        {
            "type":"contains",
            "field":"product.name",
            "value":"artikel"
        }
    ]
}

```

Gruß

Krispin

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [7. September 2019 um 08:46 UTC](https://forum.shopware.com/t/api-filter/61326/8 "2019-09-07T08:46:17Z")

</div>

Diese Filter-Geschichte lässt mir keine Ruhe, bzw. gibt es immer wieder neue Fragen / Probleme:

Wie kann man Filter miteinander kombinieren bzw. mit **AND** oder **OR** filtern?

Auf dieser Dokuseite wird der “Multifilter” erwähnt, mit dem man anscheinend zwei Filter mit **AND** oder **OR** verknüpfen:  
[https://docs.shopware.com/en/shopware-platform-dev-en/internals/core/data-abstraction-layer/search#multifilter](https://docs.shopware.com/en/shopware-platform-dev-en/internals/core/data-abstraction-layer/search#multifilter)

Es ist mir aber leider noch nicht gelungen den Multifilter in ein funktionierendes JSON-Format zu formatieren.

Konkretes Problem:

Filtere alle Produkte mit manufacturerId = ‘12345’ ODER manufacturerId = ‘891011’

Wie würde das JSON-Konstrukt aussehen?

&nbsp;

---

<div class="post-metadata">

**Author:** ![Krispin](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/krispin/32/12849_2.png) [@Krispin](https://forum.shopware.com/u/Krispin)\
**Post date:** [24. September 2019 um 09:23 UTC](https://forum.shopware.com/t/api-filter/61326/9 "2019-09-24T09:23:47Z")

</div>

Hi canetti2,

hast du hier schon was herausgefunden, oder soll ich mir das nochmal anschauen?  
&nbsp;

Gruß

Krispin

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [24. September 2019 um 10:05 UTC](https://forum.shopware.com/t/api-filter/61326/10 "2019-09-24T10:05:31Z")

</div>

Hallo Krispin,

vielen Dank für Deine Nachricht. Nein, leider habe ich das Problem noch nicht lösen können. Da ich genug andere Baustellen habe, die ich gerade beackere, habe ich das Problem erstmal nach hinten geschoben. Es wäre aber super nett, wenn Du Dir Geschichte noch mal anschauen könntest. Vielleicht bekommst Du ein funktionierenden JSON-String mit manufacturerId = ‘12345’ ODER manufacturerId = ‘891011’ hin?

Viele Grüße

canetti

---

<div class="post-metadata">

**Author:** ![Krispin](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/krispin/32/12849_2.png) [@Krispin](https://forum.shopware.com/u/Krispin)\
**Post date:** [24. September 2019 um 11:39 UTC](https://forum.shopware.com/t/api-filter/61326/11 "2019-09-24T11:39:56Z")

</div>

> [@canetti2 schrieb:](https://forum.shopware.com/profile/20692/canetti2 "canetti2")
> 
> Hallo Krispin,
> 
> vielen Dank für Deine Nachricht. Nein, leider habe ich das Problem noch nicht lösen können. Da ich genug andere Baustellen habe, die ich gerade beackere, habe ich das Problem erstmal nach hinten geschoben. Es wäre aber super nett, wenn Du Dir Geschichte noch mal anschauen könntest. Vielleicht bekommst Du ein funktionierenden JSON-String mit manufacturerId = ‚12345‘ ODER manufacturerId = ‚891011‘ hin?
> 
> Viele Grüße
> 
> canetti

Das sollte dann ca so aussehen:

```
{
    "filter":[
        {
            "type":"multi",
            "queries":[
            	{
		            "type":"equals",
		            "field":"product.manufacturerId",
		            "value":"16B356EB9AE14EB0AB5C963AB258E570"
		        },
		        {
		            "type":"equals",
		            "field":"product.manufacturerId",
		            "value":"34E6A6C9C46D4A12A77FC636F72C6A54"
		        }
        	],
            "operator":"OR"
        }
    ]
}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [25. September 2019 um 06:57 UTC](https://forum.shopware.com/t/api-filter/61326/12 "2019-09-25T06:57:39Z")

</div>

Hallo Krispin,

das war es - perfekt, so funktioniert die Abfrage wunderbar!

Eine kleine Anmerkung noch. Bei der Angabe für “field” kann man statt **product.manufacturerId** auch lediglich **manufacturerId** angeben!

Viele Grüße und vielen Dank nochmals!

canetti

---

<div class="post-metadata">

**Author:** ![Krispin](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/krispin/32/12849_2.png) [@Krispin](https://forum.shopware.com/u/Krispin)\
**Post date:** [25. September 2019 um 07:06 UTC](https://forum.shopware.com/t/api-filter/61326/13 "2019-09-25T07:06:58Z")

</div>

Guten Morgen Canetti2,

stimmt, habe ich ganz vergessen, gebe das iwie immer mit dem Entitätsnamen als Prefix an.  
Gern geschehen.

Gruß

Krispin

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [20. August 2020 um 07:10 UTC](https://forum.shopware.com/t/api-filter/61326/14 "2020-08-20T07:10:55Z")

</div>

@Krispin‍ ich muss diesen alten Thread nochmals aufwärmen - vielleicht kannst Du mir bei einer eigentlich einfachen Frage schnell helfen.

**equals** bedeutet ja die Prüfung auf **GLEICHHEIT**.

Wie kann ich denn bitte auf **UNGLEICHHEIT** prüfen? Ich habe es mit unequal, unequals oder auch not probiert - überall gibt es eine Fehlermeldung. In der sehr “schlanke” Shopware API Dokumentation habe ich auch nichts gefunden.

Konkretes Beispiel: Ich möchte nach allen Bestellungen filtern, bei denen ein Trackingcode hinterlegt ist.

```
                                         'type' => '???',
                                         'field' => 'trackingCodes',
                                         'value' => ''

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Krispin](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/krispin/32/12849_2.png) [@Krispin](https://forum.shopware.com/u/Krispin)\
**Post date:** [20. August 2020 um 07:16 UTC](https://forum.shopware.com/t/api-filter/61326/15 "2020-08-20T07:16:37Z")

</div>

Hi canetti2,

hierfür gibt es den NotFilter, in dem kannst du weitere Filter packen, sodass du dann ein Not-Equals-Filter aufbauen kannst.  
[https://docs.shopware.com/en/shopware-platform-dev-en/references-internals/core/dal#not](https://docs.shopware.com/en/shopware-platform-dev-en/references-internals/core/dal#not)

Gruß

Krispin

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [20. August 2020 um 07:33 UTC](https://forum.shopware.com/t/api-filter/61326/16 "2020-08-20T07:33:54Z")

</div>

@Krispin‍ erstmal 1000Dank für Deine schnelle Antwort - das ist super nett.

Bzgl. des Links mit dem PHP-Beispielcodes:

Bevor ich da jetzt wieder ewig viel Zeit reininvestiere, erlaube mir bitte noch die Frage, ob ich diesen **NotFilter** auch in meine API-Anfrage rein basteln kann? Ein entsprechendes Beispiel habe ich in der Shopware 6 API Doku leider nicht gefunden:  
[Shopware 6: Reading entities](https://docs.shopware.com/en/shopware-platform-dev-en/admin-api-guide/reading-entities)

Meine Abfrage sieht bis jetzt so ähnlich aus:

```
{"filter":[
{
"type":"???",
"field":"trackingCodes",
"value":""
}
]}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [20. August 2020 um 07:36 UTC](https://forum.shopware.com/t/api-filter/61326/17 "2020-08-20T07:36:31Z")

</div>

sorry ich sehe gerade - da gibt es ja einen API-Reiter - ich schau mir das noch mal in Ruhe an!!!

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [20. August 2020 um 10:36 UTC](https://forum.shopware.com/t/api-filter/61326/18 "2020-08-20T10:36:02Z")

</div>

@Krispin‍ ich muss Dich jetzt doch noch mal bemühen:

Also ich suche nach allen Bestellungen, bei denen eine Trackingnummer hinterlegt ist. Also alle Bestellungen bei denen **trackingCodes != ‘’** ist

Meine Abfrage sieht so aus:

&nbsp;

```
{"filter":[
  {
   "type":"not",
   "queries":[
     {
        "type":"equals",
        "field":"trackingCodes",
        "value":""
     }
             ]
    }
           ]
}

```

Als Fehlermeldung erhalte ich:

```
 Parameter "value" for equals filter is missing.

```

Ich habe es für value auch mit **false** oder **null** probiert - leider ohne Erfolg.

Vielleicht hast Du eine Idee?

---

<div class="post-metadata">

**Author:** ![Krispin](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/krispin/32/12849_2.png) [@Krispin](https://forum.shopware.com/u/Krispin)\
**Post date:** [20. August 2020 um 13:43 UTC](https://forum.shopware.com/t/api-filter/61326/19 "2020-08-20T13:43:21Z")

</div>

Hi canetti2,

ich habe das gerade zum Beispiel bei den Order-Feld campaignCode ausprobiert mit dem “null”-Wert und es funktioniert ohne Probleme.

```
{
  "filter": [
    {
      "type": "not",
      "queries": [
        {
          "type": "equals",
          "field": "campaignCode",
          "value": null
        }
      ]
    }
  ]
}

```

Gruß

Krispin

---

<div class="post-metadata">

**Author:** ![canetti2](https://avatars.discourse-cdn.com/v4/letter/c/a8b319/32.png) [@canetti2](https://forum.shopware.com/u/canetti2)\
**Post date:** [20. August 2020 um 16:34 UTC](https://forum.shopware.com/t/api-filter/61326/20 "2020-08-20T16:34:03Z")

</div>

@Krispin‍ Dein Beispiel funktioniert in der Tat. Man kann so nach allen Werten filtern, welche vom Datentyp **VARCHAR** und im Standard mit **NULL** belegt sind.

Das von mir abgefragte Feld **tracking\_codes** in der Tabelle **order\_delivery** ist aber vom Datentyp **json** und dann funktioniert die Abfrage nach **NULL** nicht mehr!

```
{"filter":
  [
    {
     "type":"not",
     "queries":
      [
       {
        "type":"equals",
        "field":"trackingCodes",
        "value":null
       }
      ]
    }
  ]
}

```

Mit diesem Query werden alle Datensätze angezeigt - unabhängig davon, ob eine Trackingnummer vergeben wurde oder nicht!

Die Frage ist also, ob es eine Möglichkeit gibt, auch **json-Datenbankfelder** nach “Nullwerten” bzw. “NichtNullwerten” zu filtern?

[Nächste Seite](https://forum.shopware.com/t/api-filter/61326.md?page=2)
