Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

【PHP】CakePHP2.x系での別モデルの使用方法まとめ

こんにちは。

久々にCakePHPについての更新です。
今回は小ネタ的な感じですが、あるコントローラーから別のモデルを使いたいとき、あるいはあるモデルから別のモデルを使いたいときの方法をまとめておきます。

以下では、hogeコントローラー、hogeモデルにおいて別のモデルを使用する場合の書き方を書いていきます。

Controller内で別のモデルを使う

Controllerで別のモデルを使う場合は、2つの書き方があります。
これは使う用途によって分けるのが良さそうです。

Controller全体で別のモデルを使う場合

そのコントローラーにおいて全体的に別のモデルを使いたい場合は以下のように書きます。

<?php
class hogeController extends AppController{
    public $uses = array('Model1', 'Model2');
}
?>

Controllerの一部のみで別のモデルを使う

Controllerで特定の処理のときのみ別のモデルを使う場合は以下のように書きます。

<?php
class hogeController extends AppController{
    public function index(){
        $this->loadModel('Model1');
        $this->Model1->find('all');
    }
}
?>

この場合はその処理のときのみ指定したモデルが読み込まれるので、全体的に使う場合の書き方より処理が早くなりますし無駄もなくなります。
ですのでこの2種類の書き方をうまく使い分けるほうが良さそうです。

Model内で別のモデルを使う

Modelにメソッドを書いて値をControllerに渡すことは多いと思います。
そのためModel内で別のモデルを使いたくなることもあると思いますが、その場合は以下のように書きます。

<?php
class hoge extends Appmodel{
    App::import('Model', 'FooModel');
    $this->FooModel= new FooModel;
    $this->FooModel->find('all');
}
?>

簡単ですね。

今回は以上です。
それでは。

参考にさせていただいたサイト

ControllerからModelを使用する | CakePHP情報

CakePHP2.xで複数のモデルを使う方法 - otyo's diary