Фильтровать запрос с помощью инструкции SQL IN в доктрине

У одного филиала может быть много клиентов, клиент может быть связан со многими филиалами. Так что это отношение многие ко многим.

Ветвь:

<many-to-many target-entity="Customer" inversed-by="branches" field="customers"/>

Клиент:

<many-to-many field="branches" target-entity="Branch" mapped-by="customers"/>

Теперь я хочу выполнить следующий запрос: выбрать всех клиентов, где ветвь клиента соответствует данному объекту ветви.

Вот что я пробовал:

  $branch = $em->getRepository('MyBundle:Branch')
               ->findOneById($bid);

  $qb->select(array('c'))
     ->from('MyBundle:Customer', 'c')
     ->where($qb->expr()->in('c.branches', $branch))
     ->andWhere('c.delted = 0')
     ->getQuery();

Итак, моя идея состояла в том, чтобы использовать оператор IN. Но это не работает.

Ошибка:

Неустранимая ошибка: объект класса DateTime не может быть преобразован в строку ..Query\Expr\Func.php в строке 48.

Любые идеи, как сделать это правильно?


person Upvote    schedule 19.10.2012    source источник
comment
Вы должны быть в состоянии добиться этого, просто используя entity: $branch->getCustomers(); а Doctrine позаботится об остальном. (если вы не хотите добавить какое-то дополнительное условие?) Или, может быть, я что-то пропустил?   -  person Cyprian    schedule 19.10.2012
comment
Я знаю, но я передаю запрос пагинатору, который ожидает запрос, а не набор объектов   -  person Upvote    schedule 19.10.2012


Ответы (1)


Попробуйте добавить соединение в свой запрос:

$qb->select(array('c', 'b'))
    ->from('MyBundle:Customer', 'c')
    ->join('c.branches', 'b')
    ->where('b IN (:branch)')
    ->andWhere('c.deleted = 0')
    ->setParameter('branch', array($branch))
    ->getQuery();
person Cyprian    schedule 19.10.2012