我对Yii的CDBCrtieria
构建器有疑问。我正在尝试使用PDO提供的转义和安全功能进行相当复杂的查询。
以下是我基本上要构建的查询:
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是否提供了任何简单的方法来实现这一点,而无需编写复杂的代码来命名我的参数等?
答案 0 :(得分: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
。