如何获取订单文章图片

How to get order article image

我正在创建一个自定义插件,如果客户输入订单号邮政编码,它会显示订单信息。我的问题是当一篇文章有​​变体时,它会多次输出同一篇文章,我认为这是因为我正在对 s_articles_img table (从订购的文章中获取图像,如果它是变体文章),存储了多次相同的值,在本例中,articleID.

我有的leftjoin:

->leftJoin('a', 's_articles_img', 'f', 'f.articleID = e.articleID')

我用本地商店软件安装和演示数据进行了测试,它有一篇名为 Variantenartikel 的文章,这是一件有不同尺寸和颜色的 T 恤。所以 s_article_img table 有 3 次相同的 articleID (5) 对于衬衫,shirt_red 和shirt_blue.

所以我的问题是:我怎样才能只得到我需要的?我试图找到table之间的关系,但看不到哪里.我检查了 s_order_details table、s_media 等。但是这些 table 之间没有关系。

我是不是漏掉了什么?

这是我的完整查询生成器:

$queryBuilder = $this->container->get('dbal_connection')->createQueryBuilder(); 
$queryBuilder->select('a.id', 'a.userID', 'a.ordernumber', 'a.ordertime', 'b.zipcode as bzipcode', 'b.firstname as bfirstname', 'b.lastname as blastname', 'b.customernumber', 'b.street', 'b.city', 'd.zipcode as dzipcode', 'd.firstname as dfirstname', 'd.lastname as dlastname', 'e.name', 'e.price', 'e.articleID', 'e.articleordernumber', 'f.img', 'f.extension', 'g.email', 'g.salutation', 'h.status')
          ->from('s_order', 'a')
          ->leftJoin('a', 's_order_billingaddress', 'b', 'a.id = b.orderID')
          ->leftJoin('a', 's_order_documents', 'c', 'a.id = c.orderID')
          ->leftJoin('a', 's_order_shippingaddress', 'd', 'a.id = d.orderID')
          ->leftJoin('a', 's_order_details', 'e', 'a.id = e.orderID')

          ->leftJoin('a', 's_articles_img', 'f', 'f.articleID = e.articleID')

          ->leftJoin('a', 's_user', 'g', 'g.id = a.userID')
          ->where($queryBuilder->expr()->orX(
            $queryBuilder->expr()->eq('a.ordernumber', ':ordernumber'),
            $queryBuilder->expr()->eq('c.docID', ':ordernumber')
           ))
          ->andWhere($queryBuilder->expr()->orX(
            $queryBuilder->expr()->eq('b.zipcode', ':bzipcode'),
            $queryBuilder->expr()->eq('d.zipcode', ':bzipcode')
           ))
          ->andWhere('d.orderID = a.id')
          //->andWhere('h.orderNumber = a.ordernumber')
          ->setParameter('ordernumber', $idNumber)
          ->setParameter('bzipcode', $zipcode);

我不是数据库查询方面的专家,所以如果这不是很准确,我深表歉意。

谢谢。

您可以使用此函数获取变体特定的封面图片:https://github.com/shopware/shopware/blob/512cc0ff59c431bbf0d1e968ec0b435e38a576ab/engine/Shopware/Core/sArticles.php#L1758

像这样:

$article = Shopware()->Modules()->Articles()->sGetArticleById($position['articleID']);
$article = Shopware()->Modules()->Articles()->sGetConfiguratorImage($article);

当你只需要封面图片时,这个函数也可以做到:https://github.com/shopware/shopware/blob/512cc0ff59c431bbf0d1e968ec0b435e38a576ab/engine/Shopware/Core/sArticles.php#L1265

image/option 关系保存在 s_article_img_mapping_rules 中。当图像有映射时,它会保存在 s_article_img_mappings 中。从文章到图片应该是相当沉重的SQL声明:

s_article_details.id -> s_article_configurator_option_relations.option_id -> s_article_img_mapping_rules.mapping_id -> s_article_img_mappings.image_id -> s_article_img.id