In s_articles_attributes Table wird die Spalte articleID nicht gesetzt

Hallo,

wenn ich im Backend einen neuen Artikel anlege oder einen bestehenden Artikel bearbeite und dabei “unten” die Freitextfelder setze, dann werden die Werte der Freitextfelder zwar in der s_articles_attributes Tabelle abgespeichert, aber die “articleID” Spalte wird nicht gesetzt. Lediglich die “articledetailsID” wird gesetzt!

 

Versuche ich nun in einem Plugin einen Artikel inkl. Details und Attributen aus der DB zu ziehen, erhalte ich keine Attribut-Werte, da die Relation für den LEFT JOIN nicht aufgelöst werden kann.

 

$builder = Shopware()->Models()->getRepository('Shopware\Models\Article\Article')->createQueryBuilder('article')
                                 ->addSelect(['mainDetail', 'attribute'])
                                 ->leftJoin('article.mainDetail', 'mainDetail')
                                 ->leftJoin('article.attribute', 'attribute');

$article = $builder
                ->addFilter([['property' => 'id', 'expression' => '=', 'value' => $articleId]])
                ->setFirstResult(0)
                ->setMaxResults(1)
                ->getQuery()
                ->getOneOrNullResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);

Dies resultiert in einem SQL-Query mit folgendem FROM/ LEFT JOIN

FROM s_articles s0_ 
LEFT JOIN s_articles_details s1_ ON s0_.main_detail_id = s1_.id 
LEFT JOIN s_articles_attributes s2_ ON s0_.id = s2_.articleID

Der zweite LEFT JOIN kann nicht aufgelöst werden, da die Spalte articleID in der s_articles_attributes nicht gesetzt wird!

Ist das ein Bug oder muss der Query anders gebaut werden, damit ich die Artikel Attribute mit erhalte?

Ab 5.2 wird das Feld nicht mehr befüllt. Generell hängen die Attribute ja an den einzelnen Varianten, daher musst du über die DetailID gehen.

1 Like