我正在创建一个自定义插件,如果客户输入订单号和邮政编码,它将显示订单信息。我的问题是,当一篇文章有变体时,它就会多次输出同一篇文章,我认为这是因为我对s_articles_img表(为了从有序的文章中获取图像,如果是变体文章)所做的加入()存储了多倍相同的值,在本例中,是articleID。
我的左撇子:
->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等,但这些表之间没有任何关系。
我是不是遗漏了什么?
以下是我的完整查询生成器:
$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);我不是数据库查询方面的专家,所以如果这个查询不太准确,我很抱歉。
谢谢。
发布于 2018-12-11 06:06:53
您可以使用此函数获取变体特定的封面图像: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
图像/选项关系保存在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
https://stackoverflow.com/questions/53715727
复制相似问题