我的 Symfony (3.3) Form EntityType 显示为选择输入,并列出了我们在数据库中拥有的所有客户端。客户端实体使用惰性模式与其他几个实体相关联。
呈现选择框时,会发出 204 个 DB 查询。我怀疑表单组件会针对每个查询结果调用 setter,从而导致加载许多额外的数据库查询。
我猜我们可以将关联映射设置为“EAGER”,或者在表单的 querybuilder 选项中使用 join('...')->addSelect('...') 方法来强制数据成为结果的一部分,但水合过程仍然当涉及多个实体时成本很高。
如您所见,我尝试使用 Doctrine Query HINT,希望它能解决问题,但它并没有改变任何东西。
那么,这种用例的方法是什么?
我应该怎么做才能只获得填充下拉输入所需的字段?
这是我到目前为止所尝试的:
$builder->add('parent', EntityType::class, [
'class' => Client::class,
,'required' => false
,'multiple' => false
,'query_builder' => function (EntityRepository $er) {
$qb = $er ->createQueryBuilder('c')
// All I want doctrine to fetch are the following fields
->select('PARTIAL c.{id,uuid,name,shortName}');
// I expected this flag to help but it does not change the total amount of queries executed
$qb->getQuery()->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);
return $qb;
}
])…
谢谢你。