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?