welche semantik hat s_articles_details.kind in SW4?

hallo, ich habe die demodaten in die 401 eingespielt und betrachte SELECT \* FROM `s_articles_details` WHERE `articleID` =2 “Münsterländer Lagerkorn 32%” Prost! :slight_smile: hier scheint es als ob kind einfach nur ein zähler ist. das wird irgendwann schiefgehen wg.: kind int(1) NOT NULL DEFAULT ‘0’ im Model Models\Article\Detail steht /\*\* \* @var integer $kind \* \* @ORM\Column(name="kind", type="integer", nullable=false) \*/ private $kind = 2; 2 ??? welche bedeutung hat kind in SW4?

Hallo bui_ak, kind ist kein Zähler. ‚kind‘ ist ein Flag welches anzeigt, was für ein Detail-Typ man vor sich hat. Im Model ist der Wert mit 2 auf einen Standard vorbelegt, dieser Wert kann aber später überschrieben werden. 1 = gehört zum Default Artikel 2 = gehört zu einer Variante/Konfigurator 3 = interne Verwendung - in den meisten Queries werden diese Typen rausgefiltert „kind <> 3“

aha, dann hat also jeder konfigurator-artikel falls varianten generiert wurden seine “master-informationen” in details gespeichert mit kind=3 ?! kind=1 ist doch eigentlich überflüssig, weil s_article.main_detail_id ja auf das detail mit kind=1 zeigt… wie dem auch sein, wäre schön wenns dazu konstanten z.b. in engine/Shopware/Models/Article/Detail.php gäbe und oder kind ein enum wäre. ah, und wie ich gerade feststelle: blogs und gutscheine sind keine artikel mehr :slight_smile: sehr schön.

Bei Varianten-Artikeln ist das aber etwas krumm: Bei regulären Artikeln ist kind=1 (wenn es eh nur einen Eintrag in der s_articles_details gibt) Bei einem Varianten-Artikel, den ich angelegt habe, ist der „Hauptartikel“ kind=3, die erste Variante ist kind=1 und die restlichen Varianten sind kind=2 Wie selecte ich jetzt alle Artikel unter Ausschluss der Varianten (bei Varianten will ich nur den Hauptartikel)?

Hallo Oli und hallo bui_ak, das Detail vom Typ “3” ist Backup des ursprünglichen Artikels welches beim Erzeugen der Varianten erstellt wird. Typ 3 sollte immer ignoriert werden. Um den Hauptartikel auszulesen, joint man einfach das Feld “s_articles.main_detail_id” einfach mit s_articles_detail und hat alle Daten zu diesem Artikel zusammen. Das Ganze kann man sich sehr schön ansehen, wenn man im Backend in der Artikelübersicht den Haken “Varianten anzeigen” setzt bzw. nicht setzt. In der Datei engine/Shopware/Controllers/Backend/ArticleList.php in Zeile 365 ist z.B. der Join. Das mit den Konstanten ist eine gute Idee mal sehen was ich machen kann :slight_smile:

Hallo Oli, anbei zwei Queries für dich: 1. Hole alle Artikel + Hauptvariante SELECT \* FROM s\_articles a INNER JOIN s\_articles\_details d ON a.main\_detail\_id = d.id 2. Holle alle Artikel + alle Varianten SELECT \* FROM s\_articles a INNER JOIN s\_articles\_details d ON a.id = d.articleID AND d.kind \<\> 3 ORDER BY a.id, d.kind Kind = 3 solltest du bei sämtlichen Queries die Varianten beinhalten ausschließen. Viele Grüße, Benjamin Cremer :shopware: