Doctrine DQL查询获取具有ManyToMany关系的所有记录

时间:2017-03-17 13:14:05

标签: doctrine dql

对于Symfony 3项目中使用Doctrine的优化查询,我想选择多个这样的实体:

实体“e”具有oneToMany关系,“a”也具有与“au”的OneToMany关系(“au”应该是ManyToMany关系中的链接表,但我需要一些额外的字段)

    $qb = $this->createQueryBuilder('e');

    return $qb->select('e, d, du')
             ->leftJoin('e.demos', 'd')
             ->leftJoin('d.demo_user', 'du')
             ->getQuery()
             ->getResult();

如果我的一个关系为空(例如没有demo_user),我的实体e和相关信息不会发送到结果中。即使没有demo也没有demo_user相关,我想拥有所有结果。

感谢您的帮助; - )

1 个答案:

答案 0 :(得分:0)

在查询中连接3个Entit的示例: 您在查询

中填充链接表
return $this->createQueryBuilder( 'e' ) 
    // if skip "->select ..." then resive all collumn form enities: E, AU, DU
    ->select(
        'e.id as id',
        'e.taskName as taskName',
            'e.dueDate as dueDate',
            'au.isOwn as isOwn',
            'du.fild2 as fild2'
        )
        ->leftJoin('YourBundle:EntityAU', 'au', 'WITH', 'au.idTask = e.id')
        ->leftJoin('YourBundle:EntityDU', 'du', 'WITH', 'ad.fild1 = au.id')
        ->where( 'au.idParent = :par1' )
        ->setParameter( 'par1', $varId )
        ->orderBy( 't.parentString', 'ASC' )
        ->getQuery()
        ->getResult();