1

我有 3 个实体:personID和。employeeapplicant

实体person有 varsemployeeapplicant, 和 OneToOne 关系。

员工和申请人有一个人作为一个ID,一个referencedColumnName="id",和一个关系 OneToOne。

很好,当我使用实体创建一个表单时person,要显示一个带有 all 的输入选择applicants,这要归功于 Doctrine2 的模糊加载进行查询以检索每个person、每个相关的候选人和相关的 empleado,这意味着一个 bd 2000 人正在做几乎 6000请求 bd 仅显示名称。

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

{{ form_rest(formularioEnlazarCandidato.person) }}

Doctrine2 执行大量查询。

我不知道如何解决这个问题,因为在表单中显示一个实体不会让我只选择per.idper.name

4

1 回答 1

0

我遇到了类似的问题,他们帮助了我——看这里Optimize DQL with double 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;
    }
于 2012-06-01T11:34:40.537 回答