CakePHPで同一テーブル内の値を比較する条件でレコードを取得する方法
2023/12/28
CakePHP3、CakePHP4で同一テーブル内の値を比較してレコードを取得する方法
CakePHP3、CakePHP4で、同一テーブル内にある項目の値を比較し、同じ値であればそのレコードを取得する記述の仕方を紹介します。
取得対象のテーブル構造とデータ
下記のような「users」テーブルがあるとします。
Table users
id name tel fax
----------
01 taro 111 121
02 jiro 112 112
03 sabu 113 null
上記のテーブル内の「tel」の値と「fax」の値が同じ(or違う)レコードを取得する記述方法を解説します。
素の SQL文で記述
SQL文で記述する場合は下記になるかと思います。
「tel」と「fax」が同じレコードを取得する場合の SQL文。
select * from users
where tel = fax;
「tel」と「fax」が違うレコードを取得する場合の SQL文。
select * from users
where tel != fax;
CakePHPのクエリービルダーの記述方法で記述
CakePHPのクエリービルダーの記述方法を用いて記述すると下記のようになります。
1 2 |
$conditiosns = ["tel = fax"]; $users = $this->Users->find()->where($conditiosns)->all(); |
「tel」と「fax」が違うものを取得する場合は下記となります。
1 2 |
$conditiosns = ["tel != fax"]; $users = $this->Users->find()->where($conditiosns)->all(); |
CakePHPのクエリービルダーの記述方法の解説
分かってしまえば、素の SQL文と同じように「"tel = fax"
」と記述することは当然のように思います。
ですが、私は下記のように記述してエラーが発生し、しばらく悩んでいました。
1 2 |
$conditiosns = ["tel" => "fax"]; $users = $this->Users->find()->where($conditiosns)->all(); |
ちなみに、エラーメッセージは「Cannot convert value of type string to integer」でした。
CakePHPの処理で where句に記述する条件の配列としては
$conditiosns = [“項目名” => “値”];
と記述すると認識していましたので、
$conditiosns = [“項目名 = 項目名”];
と記述する発想にはなかなか行き着かず、結構な時間悩んでいました。
また、探すキーワードが悪いのか、ネットを探しても見つかりませんでしたので、こうして記事にさせていただきました。
同じことで悩むことがなくなりますように!
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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。
-
-
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合
ID以外のカラムでアソシエーション(連携)させるための考え方とサンプルソースを用いての説明を行っています。
-
-
CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」
CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。
-
-
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。
-
-
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。
-
-
CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。
-
-
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5のヘルパーで他のヘルパーを読み込む方法を解説。公式の日本語CookbookはCakePHP4のソースのままで間違っているため注意が必要。CakePHP4からの移行の際も同じ点に注意が必要。
-
-
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。
-
-
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。