Doctrine orm 使用NOT IN子句和QueryBuilder进行左连接

Doctrine orm 使用NOT IN子句和QueryBuilder进行左连接,doctrine-orm,query-builder,dql,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构建它。 我的实体是国家和国旗。实体国家/地区作为字段标志作为外部id 到目前为止,我得到了以下代码: $qb = $em->create

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

SELECT * FROM flag 
left join countries
on flag.id = countries.flag
where countries.flag IS NULL
现在,我需要将其转换为DQL或使用queryBuilder构建它。 我的实体是国家和国旗。实体国家/地区作为字段标志作为外部id

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

 $qb = $em->createQueryBuilder();
    $available =
        $qb
        ->select('f')
        ->from('Flag', 'f')
        ->leftJoin('Countries', 'c', 'ON', 'c.flag = f.id')
        ->where('f.id IS NULL');
我的$available没有返回任何东西。 这个QueryBuilder怎么了


谢谢。

您还需要实际执行查询:

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

这将为您提供结果。

您还需要实际执行查询:

$result = $qb->getQuery()->execute();
where('f.id IS NULL');
这应该会给你结果

where('f.id IS NULL');
这是错误的

应该是

where('c.flag IS NULL');
这是错误的

应该是

where('c.flag IS NULL');
谢谢你的帮助

两个答案都是正确的。这是最后的代码,以防其他人搜索。 此外,我还必须将“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();
谢谢你的帮助

两个答案都是正确的。这是最后的代码,以防其他人搜索。 此外,我还必须将“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();