Доктрина отсутствует в таблице соединений

Мне нелегко решить действительно тривиальную проблему. Мне нужно получить все объекты USER, которых нет в объединенной таблице office_user. Я использую Symfony 3.4 с Docrine.

SQL будет выглядеть так:

SELECT * FROM user
LEFT JOIN office_users ON user.id = office_users.userId
WHERE role = 'ROLE_USER' AND office_users.userId is null

или же

SELECT * FROM user
WHERE id NOT IN (SELECT userId FROM office_users)

Но не работает с Docrine.

Вот офисная сущность

//AppBundle/Entity/Office
/**
 * @ManyToMany(targetEntity = "User", inversedBy = "office")
 * @JoinTable(name = "office_users",
 *      joinColumns = {@JoinColumn(name = "officeId", referencedColumnName = "id")},
 *      inverseJoinColumns = {@JoinColumn(name = "userId", referencedColumnName = "id")}
 *      )
 */
private $users;

Сущность пользователя

/**
 * @ManyToMany(targetEntity = "Office", mappedBy = "users")
 */
 private $office;

и DQuery

$query = $this->getEntityManager()
           ->createQuery(
               'SELECT u FROM AppBundle:USER u LEFT JOIN u.office o WHERE u.role = :role'
           );

$query->setParameters([
    'role' => 'ROLE_USER',
]);

return $query->getResult();

Но когда я сбрасываю объект User, я не вижу элемента в коллекции Office, но моя база данных mySQL не согласна.

Думаю в dql нужно добавить AND o.id IS NULL

M Khalid Junaid 30.05.2018 12:30

У меня было это там, как несколько минут назад, но это вызвало у меня некоторую ошибку. Теперь это волшебно работает ... спасибо

Rudolf Grabowski 30.05.2018 12:38

@MKhalidJunaid, пожалуйста, добавьте новый ответ, поскольку он решает проблему. Комментарии используются для улучшения или получения дополнительной информации и разъяснений. Тогда Рудольф подтвердит ваш ответ

Franck Gamess 30.05.2018 13:10
Стоит ли изучать 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 нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
3
63
0

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