我创建了一个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中的数据。
答案 0 :(得分:2)
您的查询构建器中需要额外的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');