cakephp findのconditions色々

SQLのWhere句に相当するconditions

条件の例

cakephpで利用頻度の高いメソッドにdbのデータを取得するfindというものがあります。conditionsオプションについては柔軟に設定できるだけあって設定が人により多岐に渡りがちな部分ですが、パターンとしては決まっているので個人的に活用しているconditionsを挙げてみようと思います。

複数のand

対象となるモデルのstatusが1で、モデルのtagが空ではない場合のconditionsです。この例ではconditionsと一緒にfieldsオプションを設定し、idとtag列のデータのみをselectするように指定しています。fieldsオプションが未設定の場合はすべてのカラムがselect対象になります。

$data = $this->MODEL->find('all', array(
    'conditions'=>array(
        'MODEL.status' => '1',
        'NOT' => array ('MODEL.tag' => "")
    ),
    'fields'=>array('id', 'tag'))
);

and条件を明示的に指定

conditionsオプション内でandを明示的に指定することもできます。以下の例は、$emailで絞り込んで、さらにstatusが1のデータを条件としています。さらに、モデルのidが$uidよりも小さいデータを返すように指定しています。

$data = $this->MODEL->find('all', array(
    'conditions'=>array(
        'and' => array(
            'MODEL.email' => $email,
            'MODEL.status' => 1,
            'MODEL.id <' => $uid
        )),
    'fields'=>array('id', 'tag'))
);

andとorの複合

上の例はand条件を3つ並列に並べたconditionsでしたが、下の例ではand条件の3つめにorの条件を複数設定してあるconditionsです。あるemailでidが指定した値よりも小さく、そして、statusが1もしくは3のデータを返すように条件指定するconditionsです。

$data = $this->MODEL->find('all', array(
    'conditions' => array(
        'and' => array(
            'MODEL.email' => $param[0][MODEL]["email"],
            'MODEL.id <' => $param[0][MODEL]["id"],
                'or' => array(
                    array('MODEL.status' => 1),
                    array('MODEL.status' => 3),
                )
            )
        ),
    )
);

あいまい検索

あいまい検索もcoditionsで設定することができます。以下のconditionsはモデルのタグ列の値が$query_paramの文字列を含み、かつstatusが1のデータを返すように条件指定する例です。

$data = $this->MODEL->find('all', array(
    'conditions' => array(
        'MODEL.tag like' => "%{$query_param}%",
        'MODEL.status' => '1'
        ),
    )
);

NOT条件

NOT検索の例は上のような感じ。statusが1でタグが空ではないデータを抽出する条件になります。

$data = $this->MODEL->find('all', array(
    'conditions' => array(
        'Model.status' => '1',
        'NOT' => array(
            'Model.tag' => ""
        )
        ),
    )
);

cakephpのfindは柔軟に設定することが可能なので、cakephpの開発においてはSQL文を直接書くことは多くないです。しかし、不正なSQL文をfindで生成した場合のデバッグ時にはSQL文の知識が必要になってきます。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

cakephp findのconditions色々の記事にコメントを投稿