Shopware API search products endpoint total from a stream inconsistent

197 Views Asked by At

I have two dynamic product groups

First: Test Product with variants

Conditions: Product Is equal to Variant product

enter image description here

enter image description here

enter image description here

Result total 7 like I expect this

Second: Active Products

Conditions: Active yes

enter image description here we allready see that the stream ids are just set to 5 products enter image description here

enter image description here

Now we get a total of 5 instead of 15 products like expected?

Why is it inconsistent, and how can I modify my request to consider also the variants?

1

There are 1 best solutions below

3
On

You shouldn't rely on the stream_ids column as an indicator which product is shown in a dynamic product group at any given moment. This is because there are multiple more things that factor into whether a product is shown to a user in a dynamic product group.

The filters you define for the group resolve to an SQL query, which in simplified terms would yield something like WHERE active = 1 AND id IN ('...', '...'). So the stream_ids column isn't used to select the contents of a group, but the entire query including all filters is executed in the storefront request. The result of that query is what you see in the preview of the dynamic product group.

Why doesn't it correlate completely with the content of stream_ids?

Shopware features inheritance of fields. If fields of a variant haven't been assigned a value, they may inherit that value from their parents. This may not be reflected in the contents of stream_ids. In fact the children/variants may even inherit the contents of stream_ids.

Then there's the fact that contents of the product group may vary, depending on the current sales channel. That may be because the sales channel features a different language, hence the content of a translatable field used in a filter may vary. Also if you use price filters, there is the possibility of products with multiple prices, which might only be shown if certain conditions are met, defined by the rule builder.

In short, don't count on the stream_ids, which can't reflect all these variables but are used in some capacity internally, for invalidating caches and such. Instead use the preview to judge what the average user might find when they see a product group. There's also the possibility to choose which sales channel the preview should apply to, for the exact reason, that contents may differ depending on the sales channel.