Symfony2表单,很多具有实体类型的查询(Doctrine 2)

时间:2012-05-08 14:50:02

标签: symfony doctrine-orm symfony-forms

我有3个实体:personIDemployeeapplicant

实体person有代码employeeapplicant以及OneToOne关系。

员工和申请人的人为IDreferencedColumnName="id",并且关系为OneToOne。

很好,当我使用实体person创建表单时,要显示所有applicants的输入选择,由于模糊加载Doctrine2使查询检索每个person,每个相关的候选人和相关的empleado,这意味着一个bd 2000人正在做大约6000个请求bd只显示名称。

如果我不打印表格,没问题,但是,如果我把它放在视图中:

{{ form_rest(formularioEnlazarCandidato.person) }}

Doctrine2执行了大量的查询。

我不确定如何解决此问题,因为在表单中显示实体不会让我只选择per.idper.name

1 个答案:

答案 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;
    }