按Doctrine2中的条件构建查询生成器。 “别名已定义”

时间:2013-08-05 07:32:34

标签: symfony doctrine-orm

我的代码如下:

        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以进行过滤?谢谢你的帮助。

1 个答案:

答案 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']);
    }
}