[CakePHP4]どこでもloadModel~

コントローラー以外でもModelを使いたい場合ってありますよね?
え?使うなって。でもコンソールとかコンポーネントとかで使いたい場合あるでしょう?
そんなときの方法です。

環境

CakePHP4(たぶんCakephp3も同じ)

方法

traitを使ってModelAwareTraitを組み込めばOKです。
今回は、Seederで使いたかったのでその例を


以前のCakePHP独自の方法で他のモジュールを読みこんでいたのですが、現在はPHP自体の一般的な機能のtraitを使っているのでわかりやすいですね。
いやーtraitって便利ですね~。

因みに、別の方法でモデルを呼び出す方法もあります。

use Cake\ORM\TableRegistry;
$user = TableRegistry::getTableLocator()->get('users');

TableRegistryはTraitじゃない普通のClassなんでclassの外側でuseしておくだけで使えます。

どっち使ってもいいと思いますが、メモリの使用量や動作スピードを考慮すると、クラス内の複数のメソッドで使いたい場合はloadModel、一つのメソッド内だけで使う場合はTableRegistryを使うといいかと思います。

タイトルとURLをコピーしました