gpt4 book ai didi

php - Symofny2 查询构建器 leftJoin 与来自多个关系的条件

转载 作者:行者123 更新时间:2023-11-29 19:44:43 25 4
gpt4 key购买 nike

我有一个产品,其描述、名称等以多种语言保存在另一个表中。一种产品可以有多种翻译(产品数据)。

目前,我获得了产品的所有翻译,并执行了 foreach 和 ifs 来根据语言环境获得所需的翻译...如果有多种语言,则循环会变得又大又难看...

我只想根据区域设置从查询中获取所需的翻译数据。我正在执行此查询,但它不起作用:

    $query = $this->createQueryBuilder('p')
->select([
'p',
'pt',
'lang',
])
->leftJoin('p.translations', 'pt', 'with', 'pt.language.iso = :locale')
->leftJoin('pt.language', 'lang')
->where("p.status = 1")
->SetParameter('locale', $locale)
->add('orderBy','p.position ASC');
return $query->getQuery()->getResult();

这是我尝试过的选项之一,我认为这是最接近解决方案的选项,但我收到错误:

[Semantical Error] line 0, col 281 near 'iso = :locale': Error: Class Mp\ShopBundle\Entity\ProductLanguageData has no field or association named language.iso

错误说明了一切,但我不明白如何解决这个问题。任何帮助将不胜感激。

最佳答案

我不知道您的列到底是什么样子,但是您有一个包含语言的表,其中包含“iso”列,并且表product_translation必须包含诸如“language_id”和“product_id”之类的内容,对吧?那么您的查询可能如下所示:

$query = $this->createQueryBuilder('p')
->select([
'p',
'pt',
'lang',
])
->join('language', 'lang', 'with', 'l.iso = :locale')
->join('product_translations', 'pt', 'with', 'pt.language_id = l.id and p.id = pt.product_id')
->where("p.status = 1")
->SetParameter('locale', $locale)
->add('orderBy','p.position ASC');

您应该创建两个自定义联接。首先将语言与 iso 列连接,然后将翻译表连接起来。并且需要将产品表与翻译表进行绑定(bind),这里需要一个语言和产品的链接。

关于php - Symofny2 查询构建器 leftJoin 与来自多个关系的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41101163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com