Мне нелегко решить действительно тривиальную проблему. Мне нужно получить все объекты 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 не согласна.
У меня было это там, как несколько минут назад, но это вызвало у меня некоторую ошибку. Теперь это волшебно работает ... спасибо
@MKhalidJunaid, пожалуйста, добавьте новый ответ, поскольку он решает проблему. Комментарии используются для улучшения или получения дополнительной информации и разъяснений. Тогда Рудольф подтвердит ваш ответ




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