我的模型类X中定义了defaultScope()
return (array('order'=>'title ASC'));
当我按如下方式运行findAllBySql()
时:
X::model()->findAllBySql(
'SELECT *
FROM x
WHERE x.id NOT IN (
SELECT y.x_id
FROM y
WHERE y.id = :y_id
)',
array(
'mf_list_id'=>$y->id,
)
);
我希望看到X的返回成员按升序排名。不幸的是,情况似乎并非如此。
有没有办法在此查询中使用默认范围?我正在动态构建sql,因此只需在findAllBySql()
调用中添加一个或多个条件或条件是不可取的。
提前致谢。
答案 0 :(得分:1)
findAllBySql()
内部calls resetScopes()
因此无法完成,只有克隆并推送自己的findAllBySql
答案 1 :(得分:0)
对于任何磕磕绊绊的人,我决定采用这个解决方案:
我没有运行findAllBySql()
,而是运行以下内容:
$criteria=new CDbCriteria();
$criteria->condition='
id NOT IN (
SELECT y.x_id
FROM y
WHERE y.id = :y_id
)';
$criteria->params=(array('y_id'=>$y->id));
X::model()->findAll($criteria);
这将使用X中的默认范围,并根据需要按标题排序。