Symfony查询构建器通过多个联接ID(ManyToMany)选择

时间:2018-12-25 22:45:53

标签: symfony many-to-many query-builder

错误查询:

$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()
;

表格({{1}与product相关的specifications):

ManyToMany

预期结果:
ID为1和2的产品。


需要什么:
需要通过所有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 个条目来获得产品。


因此,举例来说,我需要获得规格为specification_id1的产品21,因为这两个产品都具有此规格。


2运算符无济于事,因为按规范1、2和3的选择结果必须为空,因为我们没有具有所有三种规范关系的产品。


P.S。我了解为什么它不起作用,但不知道如何去做。而且找不到像stackoverflow这样的东西。

谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案:

CellRangeAddressList addressList =  new CellRangeAddressList(2,dataLength , 7, 7);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dVHelper
            .createFormulaListConstraint("=IF(K3=\"1\",\"2\")");
    XSSFDataValidation validation = (XSSFDataValidation) dVHelper
            .createValidation(dvConstraint, addressList);
    validation.setShowErrorBox(true);
    sheet.addValidationData(validation);

对于每个$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表。