エス技研

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


CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説

      2025/03/23

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条件」も使用することができます。
 

 
 

Containでアソシエーション先のテーブルを含めた状態では「exists()」は使えない

 
「exists()」は、一つのテーブル内のカラムと値を指定して、レコードが存在するか否かをチェックする関数です。
そのため、Contain句を使用してテーブルを連結して条件を指定するような使い方はできないようです。
 
そのため、テーブル連結をしてレコードの有無を調べる場合は、下記のように「first()」を使って 1件取得してみるか、「isEmpty()」を使って空なのかどうかを調べる方法があります。
 

 
「first()」の時は「true」は「レコードがある」時であり、「isEmpty()」の時は「true」は「レコードがない」時であるという点を注意して if文の分岐を構成する必要があります。
 
 

CakePHP 4.3 以降は「isEmpty()」の使い方が変更されている

 
CakePHP 4.3 以降では「isEmpty()」の使い方が変更されているようで、「isEmpty()」を使う際は「all()」が必須となったようです。
 

 
CakePHP4 Cookbook データの取り出しと結果セット
https://book.cakephp.org/4/ja/orm/retrieving-data-and-resultsets.html#query-resultset
 
 

CakePHP5の関連記事

CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
getParam('action')で取得するアクション名は別関数に移動しても不変
CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
 
その他の「CakePHP5」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP 2.3で saveの便利な使い方・サンプルソース付き

CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。

CakePHP4で公開側と管理側のデザインテンプレートを分ける方法・setLayout()
CakePHP4で公開側と管理側のデザインテンプレートを分ける方法・setLayout()

CakePHP4でデフォルトのレイアウトファイル「default.php」は管理側に使用し、これとは別のデザインを公開側のページに設定したい、を実装する方法を解説。

CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説

CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。

CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説

CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。

VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する。
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する

VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。

CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介

CakePHP4、5系の認証処理でログイン認証が通らない場合の確認方法、確認箇所を解説。ログ出力し、ステータスを確認するが、ステータスの内容も紹介。それはそのままusernameを変更する際のポイントでもある。

CakePHP 2.3でファイルのアップロード処理を作る

CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。

CakePHP3のfriendsofcake/searchでツリーカテゴリーの子階層も含めて検索する方法
CakePHP3のfriendsofcake/searchでツリーカテゴリーの子階層も含めて検索する方法

CakePHP3のツリービヘイビアを使ったツリーカテゴリーの子階層も含めての検索を検索プラグイン「friendsofcake/search」を使って実現する方法を解説しました。

CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法

CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。

CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定

CakePHP3の Authコンポーネントや CakeDC/Usersプラグインなどを利用したユーザ管理・認証システムにおいて、ログインしていなくても見ることができるページの設定方法を解説。