2012-08-24 111 views
0

Yii的CDBCrtieria構建器出現問題。我正在嘗試使用PDO提供的轉義和安全函數進行相當複雜的查詢。Dynamic PDO AND and OR

這裏是我的基本試圖建立查詢:

SELECT * FROM tbl_audit_log 
    WHERE (model_id = 1 AND model = "Title") OR 
      (model_id = 1 AND model = "Product") //etc 

這是正在動態生成的PHP,如:

$model_ids = array(array($model->id, 'Title')); 
foreach($model->products as $id => $product){ 
    $model_ids[][] = $product->id; 
    $model_ids[][] = "Product"; 
} 

所以我不知道以前的WHERE的值我構建查詢。我必須找到一個簡單的方法來構建:

WHERE (model_id = 1 AND model = "Title") OR 
      (model_id = 1 AND model = "Product") //etc 

動態。

我已經瀏覽了文檔,但是我看到的最接近的東西是addCondition,這需要複雜的編碼才能正常工作。

Yii提供任何簡單的方法來實現這一點,而不必處理編寫複雜的代碼來命名我的PARAMS等?

回答

3

這的確是更復雜一點,但這裏有一個可行的解決方案:

$criteria = new CDbCriteria(); 
$param_id = 0; 
// $model_ids is the one you built in your original code 
foreach($model_ids as $id_pair) { 
    $criteria->addCondition('(model_id = :id' . $param_id . ' AND model = :model' . $param_id . ')', 'OR'); 
    $criteria->params[ ':id' . $param_id ] = $id_pair[0]; 
    $criteria->params[ ':model' . $param_id ] = $id_pair[1]; 
    $param_id++; 
} 

這會爲每個參數的自定義標識,使他們都將被驗證。然後,您可以在查詢中使用$criteria

+0

真棒醬我忘了你可以做到這一點!我會盡快測試並標記,謝謝:) – Sammaye