2013-08-05 43 views
-1

我的代碼如下所示:根據Doctrine2中的條件構建查詢生成器。 「別名已定義爲」

 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 PARAM在我的數據庫來過濾,但如果有一次倆都price_fromprice_to PARAM,它拋出異常'v已經定義'。我該如何設法做到這一點,或者是否有最佳做法來處理param來製作過濾器?感謝您的幫助。

回答

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