Я бы хотел найти людей, которые не выделены в номер. Я сделал следующий запрос:Доктрина: Суб-запрос, где основной идентификатор объекта находится в массиве подзапроса
public function findByWithoutRoom()
{
$qb = $this->getEntityManager()->createQueryBuilder();
$qb2 = $this->getEntityManager()->createQueryBuilder();
$qb
->select('p')
->from('MyPeopleBundle:Person', 'p')
->where(
$qb->expr()->exists(
$qb2->select('r')
->from('MyAccommodationBundle:Room', 'r')
->andWhere($qb2->expr()->like('r.currentPeople', ':person'))
->setParameter('person', '%i:'.$person_id.';%')
->getDQL()
)
)
$result = $qb->getQuery()->execute();
return $result;
}
Как я могу использовать p.id вместо person_id? Примечание: currentPeople свойство типа "массив" (не "simple_array")
UPDATE:
Я также попробовал следующее:
public function finByWithoutRoom()
{
$qb = $this->getEntityManager()->createQueryBuilder();
$qb
->select('p')
->from('MyPeopleBundle:Person', 'p')
->leftJoin('MyAccommodationBundleV2:Room', 'r')
->andWhere($qb->expr()->like('r.currentPeople', '%i:p.id%'));
$result = $qb->getQuery()->execute();
return $result;
}
однако это дало мне следующую ошибку:
[Syntax Error] line 0, col 114: Error: Expected StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression, got '%'
спасибо! Я в настоящее время проверяю это. Интересно, есть ли человек с идентификатором 100 и один человек с идентификатором 1000, он может вернуться как «не null», в то время как это может быть не так. p.id также может встречаться в другом месте массива. вернемся к этому в ближайшее время. – apfz
работает только тогда, когда я делаю -> setParameter (': myid', '% i: 556%'), где 556 - это hardcoded p.id. есть ли способ, которым можно добавить подстановочные знаки в указанном вами формате? ($ qb-> expr() -> like ('r.currentPeople', 'p.id')) – apfz
мы могли бы использовать SQL concat, как описано [здесь] (http://stackoverflow.com/a/4420559/2270041), но зависит от версии доктрины, которую вы используете, если у вас есть [pr] (https://github.com/doctrine/doctrine2/pull/1397). – Matteo