首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取订单商品图像

如何获取订单商品图像
EN

Stack Overflow用户
提问于 2018-12-11 00:29:05
回答 1查看 756关注 0票数 1

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

我的左撇子:

代码语言:javascript
复制
->leftJoin('a', 's_articles_img', 'f', 'f.articleID = e.articleID')

我用一个本地的商店软件安装和演示数据进行了测试,它有一篇名为Variantenartikel的文章,它是一件具有不同大小和颜色的t恤。因此,s_article_img表的衬衫、shirt_red和shirt_blue的articleID (5)是相同的3倍。

所以我的问题是:,我怎么才能得到我需要的?,我试着找出表之间的关系,但是看不清在哪里。我检查了 s_order_details表、s_media等,但这些表之间没有任何关系。

我是不是遗漏了什么?

以下是我的完整查询生成器:

代码语言:javascript
复制
$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);

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-11 06:06:53

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

就像这样:

代码语言:javascript
复制
$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

图像/选项关系保存在s_article_img_mapping_rules中。当图像具有映射时,这将保存在s_article_img_mappings中。从文章到图像应该是一个相当重的SQL语句:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53715727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档