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の関連記事
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 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。
-
-
getParam('action')で取得するアクション名は別関数に移動しても不変CakePHP4系、5系では「getParam()」で処理中のアクション名を取得できる。そのアクションから別関数を呼び出してた関数でアクション名を調べたが同一の名称だった。
-
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。
-
-
CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」
CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。
-
-
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。
-
-
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3で静的なページを設置する場合の方法(webrootとpagesとを活用する方法)を解説。pagesの解説はデフォルトのトップページがどう表示されているかを参考に解説。ルーティングの機能も。
-
-
CakePHP 2.3 ログイン、操作履歴、アクセスログ出力
CakePHPでログインや操作履歴などのアクセスログ出力処理を作成します。
-
-
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4系、5系のログイン認証の可否のチェック、および、ログインユーザの情報を取得する方法のまとめ。複数の方法があるが手続きが微妙に異なるためまとめてみた。
-
-
CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。
-
-
CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法
CakePHP3で検索をするプラグイン「friendsofcake/search」の検索条件のカスタマイズ方法の解説。検索項目を増やしたり、以上、以下での検索や、チェックボックスによる検索の方法などを解説。