エス技研

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


CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法

      2025/01/31

Deprecated (16384) : Since 5.0.0: Calling `findList` finder with options array is deprecated. Use named arguments instead.を回避する方法

 
findListを利用して、キーと値のカラムを指定して配列を取得する方法ですが、CakePHP4系の記述方法が CakePHP5系では非推奨となっています。
そのため「Deprecated(非推奨)」が表示されます。
 
その対処方法を解説します。
 
 

CakePHP5で「Deprecated(非推奨)」を回避して findListで値を取得する方法

 

CakePHP4で findListを使用して値を取得する方法

 
CakePHP4系で findListを利用して、キーと値のカラムを指定して配列を取得する方法は、下記となります。
 

  public function getOptionsUsers()
  {
    // 取得するキーを指定
    $listArray = [
      "keyField"   => "id",
      "valueField" => "name"
    ];

    // 取得条件を設定
    $conditions["deleted"] = ;    // 削除フラグ

    return $this->find("list",$listArray)->where($conditions)->orderAsc("id")->toArray();
  }

 
 
これをこのまま CakePHP5系にコピペして使用すると、下記の「Deprecated(非推奨)」メッセージが表示されます。
 
Deprecated (16384) : Since 5.0.0: Calling `findList` finder with options array is deprecated. Use named arguments instead. C:\xampp\htdocs\vendor\cakephp\cakephp\src\ORM\Table.php, line: 2649 You can disable all deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED`. Adding `vendor/cakephp/cakephp/src/ORM/Table.php` to `Error.ignoredDeprecationPaths` in your `config/app.php` config will mute deprecations from that file only. [in C:\xampp\htdocs\vendor\cakephp\cakephp\src\Core\functions.php, line 384]
 
 

CakePHP5で推奨されている findListで値を取得する方法

 
上記の「Deprecated(非推奨)」を回避し、CakePHP5系で推奨される記述方法に変えたものが下記になります。
 

  public function getOptionsUsers()
  {
    // 取得条件を設定
    $conditions["deleted"] = ;    // 削除フラグ

    return $this->find("list",keyField:"id",valueField:"association_name")->where($conditions)->orderBy(["id"=>"ASC"])->toArray();
  }

 
 
CakePHP5 ChiffonBook 5.0 移行ガイド 非推奨 ORM
https://book.cakephp.org/5/ja/appendices/5-0-migration-guide.html#id7
 
上記に「Table::find() のオプションを配列で指定することは非推奨となりました。(Calling Table::find() with options array is deprecated. Use named arguments instead.)」と書いてありまして、これが上記の「Deprecated(非推奨)」の要因となっています。
そのため、推奨される記述方法に変更する必要があるようです。
 
 
ちなみに、下記の記述方法では「Deprecated(非推奨)」は出なくなりますが、「valueField」で指定したカラムとは異なるカラムの値が取得されることもあるようで、正しい処理ではないようです。
 

$listArray = ["keyField"   => "id","valueField" => "name"]
return $this->find("list",options:$listArray)->where($conditions)->orderBy(["id"=>"ASC"])->toArray();

 
 

orderAsc、order、groupも非推奨になっている

 
CakePHP5 ChiffonBook 5.0 移行ガイド 非推奨 Database
https://book.cakephp.org/5/ja/appendices/5-0-migration-guide.html#id6
 
また、CakePHP4のコードでは「orderAsc()」を使用していますが、これも非推奨のようです。
「order(["id"=>"ASC"])」や「group()」も非推奨のようです。
 
それぞれ下記のように書き替える必要があります。
 
「orderAsc()」は「orderByAsc()」に。
「orderDesc()」は「orderByDesc()」に。
「order()」は「orderBy()」に。
「group()」は「groupBy()」に。
 
ちなみに、この「非推奨」は、使用していても「Deprecated(非推奨)」のメッセージは出ないようです。
 
 

CakePHP5の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

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

Message

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

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

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

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

  関連記事

CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll

主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。

CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説

CakePHP3でデータ保存処理のログを取得する方法。save()では true、falseの戻り値しか取得できないが、saveOrFail()と try…catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。

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

CakePHP4、5で指定したカラムに特定の値に該当のレコードの有無をチェックするにはexists()を使う。単純にカラムを指定する方法から複数条件をand、orで探すこともできる。

CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3で値を入力直後にバリデーションする方法解説

CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。

CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法

CakePHP4でテンプレートやレイアウトファイルをデフォルトから変更する場合は「render()」を使用するが、記述場所はできるだけコントローラー内の最後の方に書く方がいい。

CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。

CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4、CakePHP5のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。

CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法

CakePHP3のキャッシュファイルのパーミッションエラー Error: SplFileInfo::openFile()が発生した場合の対応方法解説。app.phpにキャッシュファイルのパーミッション設定を行い、既存のファイルは削除。

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

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