Соедините 2 таблицы, связанные отношением 0..n / 0..n с PHP Doctrine ORM - PullRequest
0 голосов
/ 18 января 2020

У меня есть 2 таблицы: User и Series.
Существует также другая таблица: User_Series, которая символизирует, за какой серией следует пользователь. Так как эта таблица символизирует только отношение 0..n --- 0..n, класс для него не был создан.

User table:         Series table:       User_Series table:

| id      | ... |   | id      | ... |   | user_id | series_id |
|---------|-----|   |---------|-----|   |---------|-----------|
| INT(11) | ... |   | INT(11) | ... |   | INT(11) | INT(11)   |

Как создать QueryBuilder, который извлекает все серии, за которыми следует пользователь?

То, что я пробовал и не работает (возвращаются все серии):

$this->getDoctrine()
    ->getRepository(Series::class)
    ->createQueryBuilder('s')
    ->join(User::class, 'u')
    ->where('u = :user_id')
    ->setParameter('user_id', $user->getId())
    ->getQuery()
    ->execute();

1 Ответ

0 голосов
/ 20 января 2020

Отношение 0..n / 0..n между таблицами A и B символизируется другой таблицей в базе данных. Однако Doctrine моделирует его с помощью массива A внутри класса B и массива B внутри класса A.

Таким образом, при объединении это должно быть сделано с использованием этого массива.

// finds all series that a specific user follows:
$this->getDoctrine()
    ->getRepository(Series::class)
    ->createQueryBuilder('s')
    ->join('s.user', 'u')            // using s.user instead of User::class
    ->where('u = :user_id')
    ->setParameter('user_id', $user->getId())
    ->getQuery()
    ->execute();
...