Что не так с этой доктриной, запрашивающей отношения ManyToMany - PullRequest
0 голосов
/ 30 июня 2019

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

Это ошибка, которую я получаю:

В QueryException.php строка 65: [Семантическая ошибка] строка 0, столбец 58 рядом 'person =: pe': Ошибка: неверное выражение пути. Ожидается StateFieldPathExpression или SingleValuedAssociationField.

В строке QueryException.php 43:

ВЫБРАТЬ d ИЗ ПРИЛОЖЕНИЯ \ Entity \ Day d ГДЕ d.date =: date AND d.person = : Лицо

Ответы [ 2 ]

2 голосов
/ 30 июня 2019

Проблема не в версии 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 голосов
/ 30 июня 2019

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

...