php - How to select all rows that don't have one-to-many entity with certain value using Doctrine -
i have 2 entities: cage
, bird
. cage
has birds
inside relationship one-to-many.
bird
has field name
. how can select cages
there's no bird
name eagle
inside.
i trying this:
$cages = $this->createquerybuilder("c") ->leftjoin("c.birds", "b") ->where("b.name != :name") ->setparameter("name", 'eagle') ->getquery()->getresult();
this works if there's single bird
(eagle
) in cage
. cage
not selected correct behavior.
but if there multiple birds
, 1 of them eagle
, cage
gets selected though eagle
inside.
this idea, adapt table , column names necessary:
select * cages cage_id not in (select cage_id birds name='eagle');
so, using doctrine:
$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();
(inspired 'where not in' query doctrine query builder)
Comments
Post a Comment