CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
2024/08/25
CakePHP4のクリエビルダーを使用して OR条件を AND条件でつなぐ SQL文を作る方法
CakePHP4のクリエビルダーを利用して、下記のように OR条件を AND条件でつなぐ SQL文を生成する方法をお伝えします。
|
1 2 3 4 |
select * from users where ( pref = "東京" or pref = "大阪" ) and ( age = "20代" or age = "30代" ); |
CakePHP4のクリエビルダーを使用して OR条件の SQL文を生成する方法
まず初めに、OR条件の SQL文を生成する場合の記述方法を解説します。
OR条件を設定する場合は、下記のように「or」をキーとして条件を指定します。
|
1 2 3 4 5 6 7 |
$conditions = [ "or" => [ "pref" => "東京", "pref" => "大阪" ] ]; $users = $this->Users->find()->where($conditions); |
生成される SQL文は以下のようになります。
|
1 2 |
select * from users where ( pref = "東京" or pref = "大阪" ); |
CakePHP4のクリエビルダーを使用して OR条件を AND条件でつなぐ SQL文を生成する方法
OR条件が一つの時は上記の記述方法で問題ありませんが、下記のように OR条件を AND条件でつなぐ場合はどうすればいいでしょうか?
|
1 2 3 4 |
select * from users where ( pref = "東京" or pref = "大阪" ) and ( age = "20代" or age = "30代" ); |
正解は下記のように、OR条件の変数を 2つ作成し、その条件を 2つの「where()」句をつなげて記述します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$conditions1 = [ "or" => [ "pref" => "東京", "pref" => "大阪" ] ]; $conditions2 = [ "or" => [ "age" => "20代", "age" => "30代" ] ]; $users = $this->Users->find()->where($conditions1)->where($conditions2); |
「where()」句を 2つつなげるという記述方法がなんとなく無理やり感を感じてしまいますが。
参考サイト:CakePHP4 Cookbook
参考サイトは下記になります。
オフィシャルの Cookbookですが、今回紹介した内容は明確に書かれていませんので、記事にしてみました。
CakePHP4 Cookbook クリエビルダー
https://book.cakephp.org/4/ja/orm/query-builder.html
CakePHP4の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 Model、Controllerの見たい変数の中身をログ出力
CakePHPの Modelや Controllerの変数の中身をログとして出力して見る方法を提供します。
-
-
国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法
CakePHP4で定数に変数を埋め込み、翻訳機能「__()」で変数に値を入れる方法を紹介。定型の文章の一部だけを置換したい場合に利用すると便利。
-
-
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でレコードを追加、更新(Insert、Update)する記述方法を解説。1件ずつ処理、全件をまとめて処理、条件に該当する複数件のレコードを処理方法をサンプルコードを用いて解説。
-
-
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。
-
-
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。
-
-
CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3でデータベースに値を保存する前にバリデーションを行い、その結果によって処理を振り分ける方法について解説。「$topic->errors()」と「$topic->hasErrors()」の2つの方法がある。
-
-
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。
-
-
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHPのユーザ認証に使用するオフィシャルなプラグインAuthenticationだが、CakePHP5系では Authentication Ver.3系を使う必要があるが、公式ChiffonBookが間違えている。
-
-
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHPの日付、日時の型であるdate型、datetime型の最大値は2999-12-31となっている。MySQLは9999年までなので違いがあるので注意が必要だ。
-
-
CakePHP 2.3でOn Duplicate Key構文を実装
CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。