我想创建一个如下所示的表单选择字段:
<select>
<option value="product.product_id">product_details.detail_name</option>
etc...
</select>
值不是问题,问题在于标签。
我有一个产品实体和一个 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 使用正确的语言。
那么,有人可以帮助我如何通过连接查询制作我想要的选择列表吗?