Query ManyToMany Доктрина - PullRequest
       12

Query ManyToMany Доктрина

0 голосов
/ 12 апреля 2019

Я пытаюсь построить запрос, используя Doctrine, но немного борюсь с отношениями DQL и ManyToMany.

У меня есть субъект Бизнес, Клиент, Менеджер и Здание.

Каждый Бизнес связан с Бизнесом, может иметь много Менеджеров, и каждый Менеджер связан с Клиентом.

Кроме того, каждый Бизнес связан с Клиентами, имеющими отношения ManyToMany. Вот схема, которая может помочь понять отношения: 1

Я хотел бы создать запрос, в котором перечислены все клиенты, связанные с бизнесом, с присоединениями от бизнеса к клиентам, но которые не связаны напрямую с бизнесом-клиентом во взаимоотношениях ManyToMany.

Смысл этого запроса в том, что я хочу перечислить клиентов, связанных с бизнесом, в выборке, и пользователь выбирает, какого клиента он хочет добавить в бизнес, поэтому он создает запись в отношении ManyToMany между бизнесом и Клиент. Я хочу скрыть клиентов, уже добавленных в Бизнес, чтобы кто-то не мог несколько раз добавить Клиента в Бизнес.

Вот что я хотел бы сделать с помощью SQL:

SELECT * FROM client c
INNER JOIN manager m ON c.id = m.client_id
INNER JOIN building_manager bm ON m.id = bm.manager_id
INNER JOIN building b ON bm.building_id = b.id
INNER JOIN business bs ON b.id = bs.building_id
LEFT JOIN business_client bc ON bs.id = bc.business_id
WHERE bs.id = ?
AND bc.business_id IS NULL;

Используя Doctrine, я пытался добиться аналогичного результата, используя это в моем файле ClientRepository:

 public function findByBuilding($id) {
 return $this->createQueryBuilder('c')
     ->innerJoin('App\Entity\Manager', 'm', 'WITH', 'c.id = m.client')
     ->join('m.buildings', 'b')
     ->leftJoin('c.businesses','bs')
     ->andWhere('b.id = :val')
     ->andWhere('bs.id IS NULL')
     ->setParameter('val', $id)
     ->getQuery()
     ->getResult();
     }

Кажется, что это строка ->andWhere('bs.id IS NULL'), потому что она понимается как WHERE business.id IS NULL, и я хотел бы что-то вроде WHERE business_client.business_id IS NULL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...