次のようなフォーム選択フィールドを作成したいと思います。
<select>
<option value="product.product_id">product_details.detail_name</option>
etc...
</select>
値は問題ではなく、問題はラベルにあります。
productエンティティとproductDetailsエンティティがあり、製品に関する翻訳されたデータが含まれています。
したがって、私のフォーム型クラスのbuildFormメソッドには、次のものがあります。
$builder->add('product', 'entity', array(
'class' => 'MyBundle:Product',
'property' => 'details.detail_name',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('p')
->select('p, pd')
->join('p.details', 'pd')
->where('pd.language_id = :lang')
->setParameter('lang', 'en');
}));
プロパティをdetails.detail_nameにします。
このプロパティ値にさまざまな値を試しました。'details.detail_name'、'pd.detail_name'、および'p.details.detail_name'のように。
ただし、プロパティに詳細名を表示させることは不可能のようです。
上記のコードを使用すると、次のエラーが発生します。
Neither property "detail_name" nor method "getDetailName()" nor method "isDetailName()" exists in class "Doctrine\ORM\PersistentCollection"
このgetDetailName()メソッドはProductDetailsエンティティに存在します。エンティティを確認しましたが、すべて問題ないようです。また、フォームの外でこれらのエンティティを使用すると、問題なく機能します。
また、結果のクエリをデータベースで直接実行しようとしましたが、期待どおりの結果が得られました。detail_nameは正しい言語です。
それで、誰かが私が望む選択リストを結合されたクエリで作成する方法について私を助けることができますか?