繁体   English   中英

如何使用Doctrine选择没有具有特定值的一对多实体的所有行

[英]How to select all rows that don't have one-to-many entity with certain value using Doctrine

我有两个实体: CageBird Cage里面有Birds ,所以他们的关系是一对多的。

Bird有一个字段name 我怎样才能选择里面没有名字叫eagleBird所有Cages

我试图这样做:

$cages = $this->createQueryBuilder("c")
            ->leftJoin("c.birds", "b")
            ->where("b.name != :name")
            ->setParameter("name", 'eagle')
            ->getQuery()->getResult();

如果Cage只有单个Bird ( eagle ),则此方法有效。 然后没有选择Cage ,这是正确的行为。

但是如果有多个Birds并且其中一个是eagle ,则即使eagle在里面, Cage也会被选中。

这是想法,根据需要调整表名和列名:

SELECT * FROM cages
WHERE cage_id NOT IN
(SELECT cage_id FROM birds WHERE name='eagle');

所以,使用教义:

$qb = $this->createQueryBuilder();

$cagesWithEagles = $qb->select('b.cage_id')
    ->from('birds', 'b')
    ->where("b.name = :name")
    ->setParameter("name", 'eagle')
    ->getQuery()
    ->getResult();

$cagesWithoutEagles = $qb->select('c.cage_id')
    ->from('cages', 'c')
    ->where($qb->expr()->notIn('c.cage_id', $cagesWithEagles))
    ->getQuery()
    ->getResult();

(灵感来自'where not in' 查询与学说查询构建器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM