我的产品在另一个表中保存了多种语言的描述,名称等。一种产品可以有多种翻译(产品数据)。
目前,我获得了该产品的所有翻译,并根据语言环境进行了预测和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
错误说明了一切,但我不明白如何解决这个问题。任何帮助都会被贬低。
答案 0 :(得分:0)
我不知道您的列的外观如何,但是您的语言表包含列" 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列加入语言,然后加入转换表。您需要将产品表与转换表绑定在一起,此处需要指向语言和产品的链接。