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の関連記事
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でロギングスコープやログレベルを使用してログを出し分ける方法を解説
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。
-
-
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。
-
-
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。
-
-
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。
-
-
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3でOGPを設定する方法を解説。fetch、assignを使用しレイアウトファイルに編集した変数にテンプレートファイルから値を指定する。これを利用してOGPを編集する。
-
-
CakePHP3でテーブルにカラム(項目)を追加したときに変更するポイントのまとめ
CakePHP3でシステム開発をする際、途中でカラムを追加した場合に何を変更すればいいかを確認。カラムを追加する前後で Bakeした結果を比較し、変更になった点をリストアップした。
-
-
CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る
他のテーブルのマスタのレコードからプルダウンリストを作成し、選択できるようにするサンプルプログラムと解説。ORMの設定によりデータベースの値を取得し、配列を作成し optionsに与える。
-
-
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。
-
-
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
CakeDC謹製Usersプラグインの紹介。UserHelperを利用し、ログアウトのリンクや権限があるときのみ表示されるリンク、プロフィールページへのリンク、reCAPTCHAの設置方法などを解説。
-
-
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。