【CakePHP2】コードから学ぶ、動的にテーブルを変更する方法

target=”_blank” rel=”noopener noreferrer”>

CakePHPを勉強していると、様々な部分で現在のモデルで接続しているテーブルとは違うテーブルに接続したいときが出てくると思います。

CakePHPを勉強し始めたころは、チュートリアルのせいもあり、テーブルと同名のモデルからしかデータを取得出来ないと思いがちです。
僕もこの問題で3日間くらいはつまずきました。ただ慣れてしまえばとても簡単です。

例えば、postsテーブルにPostモデルでコードを書いていて、personsテーブルに接続したくなったときなどです。

そういう場合は

ClassRegistry::init

を使いましょう。
上の例の場合だと、以下のようにかけます。

class Posts extends AppModel {
     public $name = 'Post';

     public function index(){
           $Person = ClassRegistry::init('Person');
           $data = $Person->find('all');
     }
}

ClassRegistry::initの返り値を上記のように変数に代入しておけば、あとは変数を使ってテーブルを操作出来ます。
もちろん以下のようにもかけます。

<?php
class Posts extends AppModel {
     public $name = 'Post';

     public function index(){
           $data = ClassRegistry::init('Person')->find('all');
     }
}

参考にしてみてください。

何か質問や間違ってるとこなどありましたら、Facebookコメント欄、またはリプライ(@DAI199)までお願いします。