Что не так с этой доктриной, запрашивающей отношение ManyToMany

Я пробую 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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Думаю, проблема не в версии 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()
;

Вот эта ошибка, если я попробую этот код: [Семантическая ошибка] строка 0, столбец 67 рядом с «человеком) =: p»: Ошибка: Invalid PathExpression. Должен быть SingleValuedAssociationField.

sanof 30.06.2019 08:22

Да, второй работает. Вы забыли ) в части andWhere после p.id. Спасибо!

sanof 30.06.2019 09:33

Вы можете получить дни, связанные с людьми, просто из ассоциации, например $person->getDays()

Да, я знаю, но смысл этой функции в том, чтобы получить конкретный день для конкретного человека. поэтому я намерен также добавить, где фильтровать даты. $query->andWhere('d.date = :date').

sanof 30.06.2019 11:50

Другие вопросы по теме