2015-01-02 54 views
2

所以這是我如何使用標準:如何更改學說標準命令的順序

$criteria = Criteria::create(); 
$criteria->andWhere($criteria->expr()->eq('author', /**/)); 
$criteria->orWhere($criteria->expr()->eq('author', /**/)); 
$criteria->orWhere($criteria->expr()->eq('author', /**/)); 

導致SQL命令:

WHERE 

     (
     (
      t0.author_id = ? 
      OR t0.author_id = ? 
     ) 
     OR t0.author_id = ? 
    ) 

如果我需要這個?

WHERE 

     (
     (
      t0.author_id = ? 
      OR t0.author_id = ? 
      OR t0.author_id = ? 
     ) 
    ) 

有什麼辦法可以改變括號的關聯嗎?

回答

2

試試這個:

$criteria = Criteria::create(); 
$criteria->andWhere(
    $criteria->expr()->orX(
     $criteria->expr()->eq('author', /**/), 
     $criteria->expr()->eq('author', /**/), 
     $criteria->expr()->eq('author', /**/) 
    ) 
); 
+0

謝謝。有什麼方法可以找到標準是否找到任何東西?據我所知,他們根本就不過濾任何東西,並且如果他們沒有找到匹配,就像他們不工作一樣。 –

+0

我不是Criteria的專家,但是在查詢中,我想我會使用左連接來做這件事,測試結果是否爲空... – loicfavory

+0

我沒有什麼問題。我需要生成如下內部表達式: foreach($ filter-> getFilterAuthors()as $ author){ $ criteria-> expr() - > eq('author',$ author); }哪個不支持需要參數的orX()函數。 –