Мне трудно решить действительно тривиальную проблему.Мне нужно получить все сущности 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.
Вот объект Office
//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();
Но когда я сбрасываюПользовательский объект Я не вижу элементов в коллекции Office, но моя база данных mySQL не согласна.