YiiのCActiveDataProviderでCDbCriteriaを使う際の注意

先の投稿にも書きましたが、

select id from hoge 
where status=1
and created>'2012-12-12'
order by id
limit 5;

のようなSQLを発行したい場合は、

$criteria = new CDbCriteria;
$criteria->select='id';
$criteria->order='id';
$criteria->limit=5;
$criteria->compare('status','1');
$criteria->compare('created','>2012-12-12');

$datas=$this->findAll($criteria);

のようにすると$datasにデータを取得することができますが、CActiveDataProvider経由でデータを取得したい場合、

$criteria = new CDbCriteria;
$criteria->select='id';
$criteria->order='id';
$criteria->limit=5;
$criteria->compare('status','1');
$criteria->compare('created','>2012-12-12');

$dataProvider=new CActiveDataProvider(get_class($this), array(
  'criteria' => $criteria,
));

のようにしてもorderとlimitがCActiveDataProviderには渡りません。
CActiveDataProviderでorderやlimitを利用する場合は、

$criteria = new CDbCriteria;
$criteria->select='id';
$criteria->compare('status','1');
$criteria->compare('created','>2012-12-12');

$dataProvider=new CActiveDataProvider(get_class($this), array(
  'criteria' => $criteria,
  'sort' => array(
    'defaultOrder' => 'id',
  ),
  'pagination' => array(
    'pageSize' => 5,
  ),
));

のようにする必要があります。

投稿日:
カテゴリー: php タグ: