【发布时间】:2020-11-03 17:37:22
【问题描述】:
我有一个具有 OneToMany AttributeValues 的 Product 实体。每个AttributeValue,都有一个Attribute关系和一个“value”参数。
我想过滤同时具有“颜色”(属性)“黑色”(值)和“尺寸”“2m”的产品。
$qb->leftJoin("product.attrVal","attrVal");
$andX = $qb->expr()->andX();
$count = 0;
foreach($params['filters'] as $att_id => $values) {
foreach ($values as $val){
$andX->add("attrVal.attribute = :att_id_".$count." and attrVal.value = :val_".$count);
$qb->setParameter("att_id_".$count, $att_id);
$qb->setParameter("val_".$count, $val);
$count++;
}
}
$qb->andWhere($andX);
当然,这只有在只给出一个属性时才有效。如果过滤器数组包含多个值,则不会给出任何结果。可能是因为它正在寻找满足同一 AttributeValue 对象的所有条件,而不是寻找满足至少一个条件的所有 AttributeValue 对象。但我的最终目标是一次找到具有所有给定属性的对象。但无法弄清楚如何在查询生成器中说明这一点。
谢谢!
【问题讨论】: