我的代码如下:
if (isset($filters['price_from'])) {
$queryBuilder
->leftJoin($root . '.variants', 'v')
->andWhere($queryBuilder->expr()->gte('v.price', ':price'))
->setParameter('price', $filters['price_from']);
}
if (isset($filters['price_to'])) {
$queryBuilder
->leftJoin($root . '.variants', 'v')
->andWhere($queryBuilder->expr()->lte('v.price', ':priceTo'))
->setParameter('priceTo', $filters['price_to']);
}
我想处理GET参数以在我的数据库中进行过滤,但如果同时存在 price_from 和 price_to 参数,则抛出异常'v已经是定义”。我怎样才能做到这一点,或者是否有最佳实践来处理param以进行过滤?谢谢你的帮助。
答案 0 :(得分:0)
您可以对这两个条件进行分组,以便只调用leftJoin
一次。
if (isset($filters['price_from']) || isset($filters['price_to'])) {
$qb->leftJoin($root.'.variants', 'v');
if (isset($filters['price_from'])) {
$qb->andWhere($queryBuilder->expr()->gte('v.price', ':price'))
->setParameter('price', $filters['price_from']);
}
if (isset($filters['price_to'])) {
$qb->andWhere($queryBuilder->expr()->lte('v.price', ':priceTo'))
->setParameter('priceTo', $filters['price_to']);
}
}