SQLでandとorが混在する場合のCDbCriteriaの書き方(Yii)

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

のようなandだけの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);

のようにします。

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

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

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

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

のようにします。

select id from hoge 
where (name like 'fugo%' or email='fugo@hoge.com')
and status=1
and created>'2012-12-12'
order by id
limit 5;

のようなandとorが混在するSQLを発行したい場合は、

$criteria = new CDbCriteria;
$criteria->select='id';
$criteria->order='id';
$criteria->limit=5;
$criteria->compare('name','fugo',true,'OR');
$criteria->compare('email','fugo@hoge.com',false,'OR');

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

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

のようにします。
CDbCriteriaの詳しい説明はこちらにあります。

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

1件のコメント

コメントは受け付けていません。