我创建了一个symfony实体表单类型,并使用QueryBuilder来获取实体。
我的Querybuilder看起来像这样:
$qb = $this
->em
->getRepository('Namespace'Entity'Domain'Nic')
->createQueryBuilder('domainNic')
->join('domainNic.article', 'article')
->andWhere('article.category = :domainCategory')
->setParameter('domainCategory', Article::CATEGORY_DOMAINS)
->orderBy('article.title');
我的表单类型定义如下所示:
$builder->add(
'withTld',
'bootstrap_collection',
array(
'allow_add' => true,
'allow_delete' => true,
'add_button_text' => 'addtext',
'delete_button_text' => 'deletetext',
'type' => 'entity',
'sub_widget_col' => 5,
'label' => '***',
'options' => array(
'class' => 'Namespace'Entity'Domain'NIC',
'query_builder' => $qb,
'property' => 'title'
)
)
);
结果看起来与预期完全一样,但对于每个找到的记录,Symfony都不使用QueryBuilder中的数据。相反,Symfony会重新获得每一张唱片的标题。
有人知道解决办法吗?我希望Symfony使用QueryBuilder中的数据。
在查询生成器中需要额外的select
行
$qb = $this
->em
->getRepository('Namespace'Entity'Domain'Nic')
->createQueryBuilder('domainNic')
->addSelect('article') // <---------------- THIS
->join('domainNic.article', 'article')
->andWhere('article.category = :domainCategory')
->setParameter('domainCategory', Article::CATEGORY_DOMAINS)
->orderBy('article.title');