CakePHP3 クエリ作成パターンまとめ(find)

CakePHP3でSQLクエリを作成するパターンを纏めてみました。 そのSELECT編です。

find

$this->Hoges->find()
    ->where(条件)
    ->order(条件)
    ->order(条件)
    ->select(フィールド)
    ->all()

WHERE区の指定方法

AND条件A

$this->Hoges->find()->where(['Hoges.id' => 1, 'Hoges.name LIKE' => '%AAA%']);

AND条件B

$this->Hoges->find()->where(['Hoges.id' => 1])
						->where(['Hoges.name LIKE' => '%AAA%']);

出力されるSQLのWHERE区

WHERE Hoges.id = 1 AND Hoges.name LIKE '%AAAA%';
上記の記載は両方同じ出力。内部の条件はANDとなる。

OR条件A

$this->Hoges->find()->where(['OR' => ['Hoges.id' => 1, 'Hoges.name' => 'BBB']]);

出力されるSQLのWHERE区

WHERE Hoges.id = 1 AND Hoges.name LIKE '%AAAA%';

AND ORの複合条件

$this->Hoges->find()->where(['Hoges.id' => 1, 'OR' => [['Hoges.name LIKE' => '%AAAA%'], ['Hoges.name LIKE' => '%BBBB%']]]);

出力されるSQLのWHERE区

WHERE Hoges.id = 1 AND (Hoges.name LIKE '%AAAA%' OR Hoges.name LIKE '%BBBB%');

1件のみ取得する方法

基本的に指定が無ければ全件取得されてしまいます。 1件の指定方法には”first”を利用します。

firstを使った検索

$this->Hoges->find()->where(['Hoges.id' => 1])->first();
最後にfirst()を使用すればok。

ORDERによるソート

ORDER区による並び順も単純なので、簡単に記載します。 WHERE区に続けて、以下の記載でok。 カラム名とDESC/ASCを指定し、メソッドチェーンで複数指定が可能。
->order(['Hoges.id' => 'DESC']);

OFFSET, LIMIT

OFFSET, LIMITの記載方法も同様です。 WHERE区に続けて、以下の記載でok。 メソッドチェーンでlimit(), offset()に指定の数値を指定する。
->limit(100)->offset(100);

GROUP BY, HAVING

OFFSET, LIMITの記載方法も同様です。
->group(['Hoges.id'])->having(['Hoges.id >' => 100]);
タイトルとURLをコピーしました