左连接NOT IN子句和QueryBuilder

时间:2017-01-18 13:27:50

标签: doctrine-orm query-builder dql

我正在尝试将查询转换为DQL或使用查询构建器构建ir。 我可以通过以下查询成功地检索数据库的结果:

SELECT * FROM flag 
left join countries
on flag.id = countries.flag
where countries.flag IS NULL

现在,我需要将其转换为DQL或使用queryBuilder构建它。 我的实体是国家和国旗。实体Country作为外部标识的字段标志。

到目前为止,我得到了以下代码:

 $qb = $em->createQueryBuilder();
    $available =
        $qb
        ->select('f')
        ->from('Flag', 'f')
        ->leftJoin('Countries', 'c', 'ON', 'c.flag = f.id')
        ->where('f.id IS NULL');

我的$ $转储不会返回任何内容。 这个QueryBuilder有什么特别之处?

感谢。

3 个答案:

答案 0 :(得分:1)

您还需要实际执行查询:

$result = $qb->getQuery()->execute();

应该给你结果。

答案 1 :(得分:1)

where('f.id IS NULL');

错了。

应该是

where('c.flag IS NULL');

答案 2 :(得分:0)

感谢您的帮助。

两个答案都是正确的。下面是最后的代码,以防其他人搜索。 此外,我不得不更换' ON'与' WITH'。

$available =
        $qb
        ->select('f')
        ->from('Flag', 'f')
        ->leftJoin('Countries', 'c', 'WITH', 'c.flag = f.id')
        ->where('c.flag IS NULL');
    $flags = $qb->getQuery()->execute();