$criteria=new CDbCriteria();
としたあと、書き方の選択肢がいくつかあるので、そのメモです。
■ 他のtableをjoinする場合
$criteria->join.=' LEFT JOIN {{table_a}} a ON t.table_a_id=a.id ';※メインのtableは t というデフォルトの別名が付きます。
※複数のtableをjoinする場合、CDbCriteriaのjoinプロパティは一つしか無い(配列ではなく文字列なので)ので.(ドット)で連結する事に注意!
※{{table_name}}で指定する事で、動的にprefixを無視してtable名を読み込めます。便利ですね
■ paramsの持たせ方
配列なので当たり前だけど後からどんどん追加できます。$criteria->params[':name']="%{$name}%"; // 文字列 $criteria->params[':test_1']=$test_1; // 数値等
■ 一つのtextFieldで複数のfieldをテキスト検索する場合
$criteria->addCondition('t.title LIKE :title OR t.comment LIKE :comment'); $criteria->params[':title']="%{$search['text']}%"; $criteria->params[':comment']="%{$search['text']}%";
■ where in で検索する方法
普通にリファレンスに書いてありますけどね、、一応メモ$criteria->addInCondition('group_id', $group_id_array);
■ createCommandでも書けます
$commands=Yii::app()->db->createCommand() ->from('{{member}} t') ->leftJoin( '{{member_category_relation}} c', 't.id=c.member_id AND c.group_id=:group_id' , array( ':group_id'=>$this->_group->id, ) ) ->select(array( 't.id AS id', 'name', 'category_id', 't.update_time AS update_time')) ->where( array('in', 't.id', $member_ids) ); // 後から追加も可能 $commands->order=$order_sql; // コマンド実行 $datas=$commands->queryAll();
0 コメント:
コメントを投稿