Search code examples
shopwareshopware6shopware6-api

Filter by Product Properties with Store API


For the store API endpoint /store-api/product is it possible to filter on the properties of a product? Not the defaults such as whether it's active or stock levels, but the properties we've defined on the product, for example colour or farbe? For the search endpoint it supports passing in a list of properties ID's which this one does not.

None of the below queries work, and return the various errors below or Call to a member function buildAccessor() on null.

{
    "limit": 40,
    "filter": [
        {
            "type": "contains",
            "field": "Farbe",
            "value": "red"
        }
    ]
}

"Field \"Farbe\" in entity \"product\" was not found."

{
    "limit": 40,
    "filter": [
        {
            "type": "contains",
            "field": "properties.Farbe",
            "value": "red"
        }
    ]
}

"Field \"Farbe\" in entity \"property_group_option\" was not found."

Solution

  • You can combine filters for the name of the property value and their respective group in a multi filter. The following example will only give you products that have the "shoe-color" property with the value "coral".

    {
      "limit": 1,
      "includes": {
        "product": ["id", "productNumber", "properties"],
        "property_group_option": ["name", "group"],
        "property_group": ["name"]
      },
      "associations": {
        "properties": {
          "associations": {
            "group": []
          }
        }
      },
      "filter": [
        {
          "type": "multi", 
          "operator": "and",
          "queries": [
            {
              "type": "equals",
              "field": "properties.group.name",
              "value": "shoe-color"
            },
            {
              "type": "equals",
              "field": "properties.name",
              "value": "coral"
            }
          ]
        }
      ]
    }
    

    Example response:

    {
        "entity": "product",
        "total": 1,
        "aggregations": [],
        "page": 1,
        "limit": 1,
        "elements": [
            {
                "productNumber": "6bbfe1f608504c9b9a7bf92d6a071734",
                "properties": [
                    {
                        "name": "coral",
                        "group": {
                            "name": "shoe-color",
                            "apiAlias": "property_group"
                        },
                        "apiAlias": "property_group_option"
                    },
                    {
                        "name": "cotton",
                        "group": {
                            "name": "textile",
                            "apiAlias": "property_group"
                        },
                        "apiAlias": "property_group_option"
                    }
                ],
                "id": "062ba988aa1840fa84371c9c43b2f838",
                "apiAlias": "product"
            }
        ],
        "states": [],
        "apiAlias": "dal_entity_search_result"
    }