[CakePHP] find()オプション

タグ :

データベースからデータ取得する場合に最も多く利用するメソッドとして「find()」があります。
このfind()のオプションに「conditions」という取得条件を指定するものがあります。

conditionsの使い方

基本的な使い方としては、

$this->User->find('all', array(
   'conditions' => array('id' => 10)
));

上記は、Userテーブルからidが「10」のものだけを取得します。
条件の指定では、値の「10」のところを変数に置き換えて使用することが多いです。

条件の複数指定

複数の条件を指定する場合は配列を用いて指定します。
例えば、ユーザーIDが指定した3つのIDのみを取得する場合など。
取得したいデータのidを複数指定させる方法ですが、以下は間違いです。

/***間違い*******************************/
$this->User->find('all', array(
   'conditions' => array('id' => $data1),
   'conditions' => array('id' => $data2),
   'conditions' => array('id' => $data3)
));
/***************************************/

上記では、最下の「$data3」だけが指定されてしまいます。
正しくは、以下のように配列を用います。

$arr = array($data1, $data2, $data3);
$this->User->find('all', array(
   'conditions' => array('id' => $arr)
));

指定するフィールドが異なる場合は、「or」を使用して指定します。
以下は一ヶ月以内に登録したユーザーID($data1, $data2, $data3)のみを取得します。

$arr_id = array($data1, $data2, $data3);
$date = date('Y-m-d', strtotime('-1 month'));
$this->User->find('all', array(
   'conditions' => array(
      'or' => array(
         'id' => $arr_id,
         'created >=' => $date
      )
   )
));

上記の「or」を指定しないと「and」として検索されてしまうので注意です。

組み合わせ条件

上記以外で、組み合わせ条件を複数指定する場合があります。
例えば、「一ヶ月以内に登録された A の付くユーザー名」と「一週間以内に登録された B の付くユーザー名」など。

$date_A = date('Y-m-d', strtotime('-1 month'));
$date_B = date('Y-m-d', strtotime('-1 week'));
$this->User->find('all', array(
   'conditions' => array(
      'or' => array(
         array(
            'username like' => '%A%',
            'created >=' => $date_A
         ),
         array(
            'username like' => '%B%',
            'created >=' => $date_B
         )
      )
   )
));

このように条件指定は、配列が重なり過ぎて分かり難くなってしまいがちです。
適度に改行させてインデントを揃えるなど、見やすく記述しましょう。

Share

  • このエントリーをはてなブックマークに追加

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed