Symfony 查询构建器 select 由多个连接的 ids (ManyToMany)
Symfony query builder select by multiple joined ids (ManyToMany)
查询错误:
$qb = $this->createQueryBuilder('product')
->join('product.specifications', 'specification')
->andWhere("specification.id = :specificationId_1") // this
->andWhere("specification.id = :specificationId_2") // and this
->setParameter("specificationId_1", 1)
->setParameter("specificationId_2", 2)
->getQuery()
->getResult()
;
表(product
与 ManyToMany
相关的 specifications
):
product:
id name
1 Product1
2 Product2
3 Product3
specifcation:
id name
1 Specification1
2 Specification2
3 Specification3
product_specification:
product_id specification_id
1 1
1 2
1 3
2 1
2 2
3 3
预期结果:
ID 为 1 和 2 的产品。
需要什么:
需要通过所有 specification_id
个条目获取产品。
因此,例如,我需要通过规格 1
和 2
获取产品 1
和 2
,因为这两种产品都有此规格。
IN
运算符没有帮助,因为 select 规格 1、2 和 3 的结果必须为空,因为我们没有具有所有三个规格关系的产品。
P.S。我明白为什么它不起作用,但不明白该怎么做。并且无法在 Whosebug 中找到类似的东西。
谢谢!
解决方案:
$qb = $this->createQueryBuilder("product")
->join("product.specifications", "specification_1")
->join("product.specifications", "specification_2")
->andWhere("specification_1.id = :specificationId_1")
->andWhere("specification_2.id = :specificationId_2")
->setParameter("specificationId_1", 1)
->setParameter("specificationId_2", 2)
->getQuery()
->getResult()
;
对于每个 where
需要 join
table 再用新的 alias
。
查询错误:
$qb = $this->createQueryBuilder('product')
->join('product.specifications', 'specification')
->andWhere("specification.id = :specificationId_1") // this
->andWhere("specification.id = :specificationId_2") // and this
->setParameter("specificationId_1", 1)
->setParameter("specificationId_2", 2)
->getQuery()
->getResult()
;
表(product
与 ManyToMany
相关的 specifications
):
product:
id name
1 Product1
2 Product2
3 Product3
specifcation:
id name
1 Specification1
2 Specification2
3 Specification3
product_specification:
product_id specification_id
1 1
1 2
1 3
2 1
2 2
3 3
预期结果:
ID 为 1 和 2 的产品。
需要什么:
需要通过所有 specification_id
个条目获取产品。
因此,例如,我需要通过规格 1
和 2
获取产品 1
和 2
,因为这两种产品都有此规格。
IN
运算符没有帮助,因为 select 规格 1、2 和 3 的结果必须为空,因为我们没有具有所有三个规格关系的产品。
P.S。我明白为什么它不起作用,但不明白该怎么做。并且无法在 Whosebug 中找到类似的东西。
谢谢!
解决方案:
$qb = $this->createQueryBuilder("product")
->join("product.specifications", "specification_1")
->join("product.specifications", "specification_2")
->andWhere("specification_1.id = :specificationId_1")
->andWhere("specification_2.id = :specificationId_2")
->setParameter("specificationId_1", 1)
->setParameter("specificationId_2", 2)
->getQuery()
->getResult()
;
对于每个 where
需要 join
table 再用新的 alias
。