查询多对多学说

时间:2019-04-11 23:52:36

标签: php sql symfony doctrine

我正在尝试使用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

0 个答案:

没有答案