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 bakeの超初心者向けフォロー講座
CakePHP 2.3 bakeの超初心者向けフォロー講座
-
-
CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得
URLやドメイン、フォルダへのパスの取得は、ビューではUrlHelperを使い、コントローラーではRouterクラスを使います。第2引数の指定でURLを取得することも可能。
-
-
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
CakePHP4でバッチ処理を行うためのコマンド・シェルの実装方法について解説。bakeでテンプレートファイルを作成し、「execute()」に処理を記述する方法を解説。
-
-
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応
CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP 2.x系 Viewでのコメントの記述方法など
CakePHPにおいて View、ctpファイルでコメントを記述する方法を解説。
-
-
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製UsersプラグインのCakePHP4版の紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。
-
-
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。
-
-
CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll
主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。
-
-
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。