Доктрина не в соединительной таблице - PullRequest
0 голосов
/ 30 мая 2018

Мне трудно решить действительно тривиальную проблему.Мне нужно получить все сущности 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 не согласна.

...