Ответ 1
Вот как я попробую:
$qb->select(array('DISTINCT i.id', 'i.name', 'o.name'))
->from('Item', 'i')
->join('i.order', 'o')
->where(
$qb->expr()->in(
'o.id',
$qb2->select('o2.id')
->from('Order', 'o2')
->join('Item',
'i2',
\Doctrine\ORM\Query\Expr\Join::WITH,
$qb2->expr()->andX(
$qb2->expr()->eq('i2.order', 'o2'),
$qb2->expr()->eq('i2.id', '?1')
)
)
->getDQL()
)
)
->andWhere($qb->expr()->neq('i.id', '?2'))
->orderBy('o.orderdate', 'DESC')
->setParameter(1, 5)
->setParameter(2, 5)
;
Я не проверял это, конечно, и сделал некоторые предположения о ваших моделях. Возможные проблемы:
- Предел: это была некоторая проблема в Doctrine 2, кажется, что построитель запросов не очень хорош в принятии ограничений. Посмотрите здесь, здесь и здесь.
- Предложение IN обычно используется с массивом, но я думаю, что он будет работать с подзапросом.
- Вероятно, вы можете использовать один и тот же параметр? 1 вместо двух параметров (потому что они одного и того же значения), но я не уверен.
В заключение, это может не сработать в первый раз, но, несомненно, приведет вас к правильному пути. После этого сообщите нам окончательный 100% правильный ответ.