[CakePHP] find(all)でIN句を使ってデータを抽出する方法

CakePHPで複数のIDを指定して該当するデータを取得する方法についてです。

MySQLでは1つのカラムに対して複数の条件で検索するIN句が用意されており、CakePHPでもこのIN句を使います。

まずはMySQLのIN句の使い方を確認します。

MySQLのIN句の書式
SELECT * FROM posts WHERE id IN(1,3,5,7);

idを複数の値で検索するには WHERE句で id IN(1,3,5,7) と指定します。

CakePHPでも同様の方法でIN句を使います。

具体的な使い方は下記のようになります。

IN句の使い方

条件のパラメータ部分に配列化されたデータを指定します。

//取得するIDを配列形式で準備
$params = array(1,2,3,5,7,9);

//条件文を作成
$condition=array(
    'conditions'=>array('Post.id'=>$params)
);

//findの実行
$data=$this->Post->find('all',$conditions);

これだけで、IDが 1,2,3,5,7,9 のデータが取得できます。楽ですね!

NOT IN句

IN句の逆を行うNOT IN句というのも用意されており、こちらは指定した条件にあてはまらないものを抽出します。

//取得するIDを配列形式で準備
$params = array(1,2,3,5,7,9);

//条件文を作成
$condition=array(
    'conditions' => array(
        'NOT' => array('Post.id' => $params)
    )
);

//findの実行
$data=$this->Post->find('all',$conditions);

これでPostモデルのIDが 1,2,3,5,7,9 に当てはまらないデータが抽出されます。



Author: webmaster