# ProductAttributeCondition mit Varianten

**URL:** <https://forum.shopware.com/t/productattributecondition-mit-varianten/56974>\
**Category:** Programmierung\
**Created:** [10. Dezember 2018 um 08:06 UTC](https://forum.shopware.com/t/productattributecondition-mit-varianten/56974 "2018-12-10T08:06:51Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_marco](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/_marco/32/8582_2.png) [@\_marco](https://forum.shopware.com/u/_marco)\
**Post date:** [10. Dezember 2018 um 08:06 UTC](https://forum.shopware.com/t/productattributecondition-mit-varianten/56974/1 "2018-12-10T08:06:51Z")

</div>

Guten Morgen zusammen.

Ich probiere gerade mit einer Search Criteria alle Produkte zurückgeliefert zu bekommen, bei denen ein bestimmtes Attribut gesetzt ist. Funktioniert mit „normalen“ Artikel und der ProductAttributeCondition auch ganz gut. Leider bekomme ich in meinem Result keine Varianten zurück…&nbsp;

Meine Criteria sieht so aus:

```
$criteria = new Criteria();
$criteria->addCondition(new IsAvailableCondition());
$criteria->addCondition(new ProductAttributeCondition('custom_attribute', ProductAttributeCondition::OPERATOR_EQ, '4711'));

```

Kann mit jemand nen Denkanstoß geben, ob und wie ich die Criteria anpassen muss, damit ich sowohl die normalen Artikel wie auch alle Varianten zurück geliefert bekomme bei denen custom\_attribute auf 4711 steht?

Viele Grüße  
Marco

&nbsp;

---

<div class="post-metadata">

**Author:** ![MrMDeluxe](https://avatars.discourse-cdn.com/v4/letter/m/4da419/32.png) [@MrMDeluxe](https://forum.shopware.com/u/MrMDeluxe)\
**Post date:** [13. Dezember 2018 um 17:55 UTC](https://forum.shopware.com/t/productattributecondition-mit-varianten/56974/2 "2018-12-13T17:55:43Z")

</div>

Hallo Marco,

&nbsp;

das Problem ist hier der Join zwischen s\_articles und s\_articles\_details.

Die QueryBuilderFactory joined nur auf alle Varianten, wenn die VariantCondition im Criteria Object vorhanden ist.

Ansonsten leider immer nur auf die Haupt Variante.

Allerdings kannst Du die VariantCondition nicht einfach so deinem Criteria Object hinzufügen, da der Constructor u.a. die optionIds der varianten als Parameter entgegen nimmt.

Die sind Dir aber ja nicht bekannt.

Die Lösung wäre hier eine eigene Condition zu programmieren.

Im Prinzip ist es eine 1 zu 1 Kopie der ProductAttributeCondition.

Im Condition Handler musst Du Dich dann um die joins aber selbst&nbsp;kümmern:

```
public function generateCondition(
        ConditionInterface $condition,
        QueryBuilder $query,
        ShopContextInterface $context
    ) {
        /*
         * $this->parse method is Imported from DynamicConditionParserTrait
         */
        
        $query->resetQueryPart('join');
        $query->innerJoin(
            'product',
            's_articles_details',
            'variant',
            'variant.articleID = product.id
                 AND variant.active = 1
                 AND product.active = 1'
        );
        $query->innerJoin(
            'variant',
            's_articles_attributes',
            'productAttribute',
            'productAttribute.articledetailsID = variant.id'
        );

        return $this->parse(
            $query,
            's_articles_attributes',
            'productAttribute',
            $condition->getField(),
            $condition->getValue(),
            $condition->getOperator()
        );
    }

```

&nbsp;
