使用模型:: findAllBySql()调用使用默认范围排序

时间:2014-03-03 15:10:28

标签: yii

我的模型类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()调用中添加一个或多个条件或条件是不可取的。

提前致谢。

2 个答案:

答案 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中的默认范围,并根据需要按标题排序。