私は、説明、名前などが複数の言語で別の表に保存されている製品を持っています。 1つの製品は複数の翻訳(製品データ)を持つことができます。Symofny2 Query Builder leftJoin with many relationship
現在、私は、製品のすべての翻訳を取得し、ロケールに基づいて必要な翻訳を取得するには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
エラーはそれをすべて言っていますが、私はこれを修正する方法を理解できません。どんな援助も感謝します。
まず、製品を選択し、左結合の代わりに翻訳に参加する必要があります。 LeftJoinは翻訳されていなくても商品をお届けします。 – Rawburner