Qbilinux 日記

Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

cakephp3 の Controller 中でデフォルトとは異なる Model を使う方法

自分へのメモがわり.

通常は Model 名 Hoge に対して Controller 名を HogesController とすればネーミングルールで自動的にマッピングされますね.

けど,Controller 内でデフォルトとは異なる Model を使いたい時がありますよね.その時には

class HogehogesController extends AppController {
    public function initialize() {
        parent::initialize();
        $this->loadModel('Hoge');
    }

な感じに記述すれば,$this->Hoge で使えますね.Cookbook 中ではhttps://book.cakephp.org/3.0/en/controllers.html#loading-additional-models のあたりかな.まぁ

use Cake\ORM\TableRegistry;
class HogehogesController extends AppController {
    public function initialize() {
        parent::initialize();
        $this->Hoge = TableRegistry::get('Hoge');
    }

でも良いのかな.また,ピンポイント的に使いたい時には,

use Cake\ORM\TableRegistry;

を先頭に書いておいて,使いたいところで

$hoge = TableRegistry::get('Hoge');

とすれば直後に

$query = $hoge->find()->...

な感じで引っ張れますね.本当にピンポンとなら使いたいとこだけで

$query = TableRegistry::get('Hoge')->find()->...

でも良いでしょうけどね.

Cookbook では loadModel の記述が使われてるってことは,Controller 全体で使いたい時には loadModel するのが推奨ってことなのかな?

でも,ORM のページ (https://book.cakephp.org/3.0/en/orm.html) には最後の記述の方が載っているからどちらでも良いってことか?

本当は cakephp のコードの中までは追っかければ良いんだろうけど...今のとことはそこまで見てないです.はい.

PHPフレームワーク CakePHP 3入門
掌田 津耶乃
秀和システム