Mit
Mit

Reputation: 349

Build a query inside another with querybuilder?

I got 2 tables User and Group; each object Group got an array members[] that points to some instances of User.

I need to build this same query with QueryBuilder :

SELECT (users instances) FROM User
WHERE (users instances) IN (SELECT Group.members from Group WHERE group.id = $someId)

How can I achieve that?

Upvotes: 0

Views: 137

Answers (2)

Albeis
Albeis

Reputation: 1580

Improving @Eimsas Answer it could be:

$em = $this->getEntityManager();

$qb2 = $em->createQueryBuilder('group')
            ->select('group.members')
            ->where('group.id = $someId');

$qb = $em->createQueryBuilder('user');
$query = $qb->select(user instances)
            ->where($qb->expr()->in('user instances', $qb2->getDQL());
$result = $query->getQuery->getResult();

Upvotes: 1

Eimsas
Eimsas

Reputation: 492

You have to make 2 querybuilders:

$qb2 = $this->em->createQueryBuilder('group')
            ->select('group.members')
            ->where('group.id = $someId');

$qb = $this->em->createQueryBuilder('user')
           ->select(user instances)
           -where($qb->expr()->in('user instances', $qb2->getDQL());

it will give you the idea how it works. Of course you have to adjust this code to yours.

Upvotes: 2

Related Questions