Я пробую Symfony 4 и не могу правильно выполнить этот запрос. То же самое работало в Symfony 3. У меня есть 2 объекта. Один человек, а другой день. Отношение ManyToMany. Я хотел бы получить все дни для определенного человека
Я пытался использовать MEMBER OF и объединять таблицы, но в этом примере ничего не работает.
// Сущность дня
/**
* @ORM\ManyToMany(targetEntity = "App\Entity\Person", inversedBy = "days")
*/
private $person;
// Личность
/**
* @ORM\ManyToMany(targetEntity = "App\Entity\Day", mappedBy = "person")
*/
private $days;
// Функция репозитория
return $this->createQueryBuilder('d')
->andWhere('d.person = :person')
->setParameter('person', $person)
->getQuery()
->getResult()
;
Это ошибка, которую я получаю:
In QueryException.php line 65: [Semantical Error] line 0, col 58 near 'person = :pe': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.
В строке 43 QueryException.php:
SELECT d FROM App\Entity\Day d WHERE d.date = :date AND d.person = :person




Думаю, проблема не в версии Symfony, а в версии orm.
Итак, вы можете попробовать это, используя IDENTITY
return $this->createQueryBuilder('d')
->andWhere('IDENTITY(d.person) = :person')
->setParameter('person', $person)
->getQuery()
->getResult()
;
или
return $this->createQueryBuilder('d')
->leftJoin('d.person', 'p')
->andWhere('p.id = :person')
->setParameter('person', $person)
->getQuery()
->getResult()
;
Да, второй работает. Вы забыли ) в части andWhere после p.id. Спасибо!
Вы можете получить дни, связанные с людьми, просто из ассоциации, например $person->getDays()
Да, я знаю, но смысл этой функции в том, чтобы получить конкретный день для конкретного человека. поэтому я намерен также добавить, где фильтровать даты. $query->andWhere('d.date = :date').
Вот эта ошибка, если я попробую этот код: [Семантическая ошибка] строка 0, столбец 67 рядом с «человеком) =: p»: Ошибка: Invalid PathExpression. Должен быть SingleValuedAssociationField.