带有 NOT IN 子句和 QueryBuilder 的左连接

问题描述 投票:0回答:3

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

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

现在,我需要将其转换为 DQL 或使用 queryBuilder 构建它。 我的实体是国家和国旗。实体 Country 作为字段标志作为外部 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 是怎么回事?

谢谢。

doctrine-orm query-builder dql
3个回答
1
投票

您还需要实际执行查询:

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

这应该会给你结果。


1
投票
where('f.id IS NULL');

错了。

应该是

where('c.flag IS NULL');

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();
© www.soinside.com 2019 - 2024. All rights reserved.