-1

我的代码如下所示:

        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_fromprice_to参数,它会抛出异常“v 已定义”。我该如何做到这一点,或者是否有最佳实践来处理参数来制作过滤器?谢谢你的帮助。

4

1 回答 1

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']);
    }
}
于 2013-08-05T07:38:29.213 回答