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

DB でフィルター処理するために 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 に答える