エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP4系、5系でカラムを指定して値があるかないかのチェックする

      2025/01/31

CakePHP4系、CakePHP5系の exists()でカラムの値の有無チェック

 
CakePHP4系、CakePHP5系で、特定のカラムに値があるかどうかをチェックする際は「exists()」を使用します。
 
具体的な使い方は、下記となります。
 

 
値があれば「true」、値がなければ「false」となります。
 
 

CakePHP4系、CakePHP5系の exists()でカラムの値の有無チェックの使用例

 

 
上記は、Bakeで自動生成した Controllerの viewアクションのソースコードです。
 
この自動生成されたソースの処理で動作はするのですが、一般に公開して多くの方に使ってもらうシステムとしては、不具合が発生しないようにもう少し処理を加える必要があります。
 
 
具体的には、今回の記事の内容である引数として指定する「$id」に入る値のチェックです。
 
例えば、引数となる「$id」の値がない場合や、値はあっても存在しない IDが指定された場合などはエラー画面が表示されてしまいますので、これらが出ないようにする必要があります。
 
「$id」が指定されていなかった場合のエラー
Record not found in table users with primary key [NULL].
Cake\Datasource\Exception\InvalidPrimaryKeyException

 
「$id」に存在しない IDが指定された場合のエラー
Record not found in table users.
Cake\Datasource\Exception\RecordNotFoundException

 
 

「exists()を使用して値をチェックするサンプルソース

 
上記の問題点を踏まえて、最低限の処置として、「$id」の値の有無と、存在チェックを追加したものが下記になります。
 

 
上記のように、「Users」テーブルの「id」というカラムに「$id」の変数に入っている値があるかどうか、をチェックする際に「exists()」を使用します。
 
値が存在しているときに「true」になりますので、それの否定形の「!」を使って、値がない時はリダイレクトをする処理にしています。
 
 

「exists()を使用して値が空の場合も含めてチェックするサンプルソース

 
ちなみに下記のように、引数がないときの値を nullではなく「$id = ""」にすることで、値の有無チェックをしないようにすることもできます。
 

 
ただ、下記のような条件が入ってきますので、あんまりメリットがないようにも思います。
※idのように「空」の値がないカラムをチェックすることが前提となります。
※「空」をチェックするため、nullがあっても該当なしとなります。
※「null」のチェックは「["id is"=>null]」とする必要があります。
 
 

exists()でカラムの値の有無チェックのバリエーション

 
上記の例は、値を探すカラムを「id」としていますが、カラム名を指定する事でテーブル内のどのカラムでも対応できます。
例えば、ログインする際のログイン IDとして使用する「login_name」というカラムがありその値を探す場合は、下記のように「カラム名」のところに「login_name」を指定する事になります。
 

 
 
値があるかどうかをチェックする機能ですので、例えば「department(部)」を条件にチェックする場合は、「1」に該当するレコードは複数ありますが、この時も 1件以上あれば「true」になります。
 

 
 
さらには、「$this->ContractSeos->find()->where([条件])」でレコードを探すときと同じように、「値の大小」や「like %値%」、複数の条件を組み合わせて「and条件」「or条件」も使用することができます。
 

 
 

CakePHP5の関連記事

CakePHP4系、5系でカラムを指定して値があるかないかのチェックする
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
 
その他の「CakePHP5」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP 2.3 Search Pluginで検索処理 その1設置方法

CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。

CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説

CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。

CakePHP3のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う

CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。

CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法

CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。

CakePHPで同一テーブル内の値を比較する条件でレコードを取得する方法
CakePHPで同一テーブル内の値を比較する条件でレコードを取得する方法

CakePHPの同一テーブルにある項目の値を比較し条件に合致するレコードを取得する方法を解説。[”項目名”=>”値”]ではなく[”項目名 = 項目名”]と書くところがポイント。

CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法

CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。

CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法

CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。

CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法

CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。

CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない

CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。

MySQL、CakePHP 2.3で「tinyint(1)」の Boolean型の動作を再確認

MySQL+CakePHPの環境で「tinyint(1)」を利用する際の動作を検証。「tinyint(1)」の Boolean型について CakePHPでは自動処理が実施されていることを確認しました。