我有3个实体:person
,ID
,employee
和applicant
。
实体person
有代码employee
和applicant
以及OneToOne关系。
员工和申请人的人为ID
,referencedColumnName="id"
,并且关系为OneToOne。
很好,当我使用实体person
创建表单时,要显示所有applicants
的输入选择,由于模糊加载Doctrine2使查询检索每个person
,每个相关的候选人和相关的empleado,这意味着一个bd 2000人正在做大约6000个请求bd只显示名称。
如果我不打印表格,没问题,但是,如果我把它放在视图中:
{{ form_rest(formularioEnlazarCandidato.person) }}
Doctrine2执行了大量的查询。
我不确定如何解决此问题,因为在表单中显示实体不会让我只选择per.id
和per.name
。
答案 0 :(得分:0)
我有类似的问题,他们帮助了我 - 看这里Optimize DQL with double join。基本上你需要在你的存储库中fetch join - 我做了:
class ProfileRepository extends EntityRepository {
public function findAll()
{
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder()
->select("p, stu, sta, pdd, pdt, pdc")
->from('AldenBonBundle:Profile', 'p')
->leftJoin('p.studies', 'stu')
->leftJoin('stu.statute', 'sta')
->leftJoin('p.disabilityDegree', 'pdd')
->leftJoin('p.disabilityType', 'pdt')
->leftJoin('p.disabilityCode', 'pdc')
->orderBy('p.profileId')
;
$res = $qb->getQuery()->getResult();
return $res;
}