C-limber's highへようこそ。
C-limber's highは山登りのサイトではなく、福岡システム開発WEB制作会社 C-limber(クライマー)株式会社の技術メモブログです。
福岡システム開発ホームページ制作をお探しの方はお気軽にご相談下さい。

2013年11月15日金曜日

[yii] CDbCriteriaの書き方いろいろ

13:10 Posted by 匿名 No comments
Yii FrameworkのCDbCriteriaを毎日毎日書いてるわけですが、

$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 コメント:

コメントを投稿