LoginSignup
13
14

More than 5 years have passed since last update.

CakePHPでモデルの共通処理作成

Posted at

共通の処理を書くモデルを別途用意して、それを各モデルからインポートする。

<?php
App::uses('AppModel', 'Model');

class DrinkModel extends AppModel {
    // 共通の処理
}

各モデル

<?php
App::import('Model', 'DrinkModel');

class Coffee extends DrinkModel {
    // 個別の処理
}

基本的にはこれだけ。
まずは共通の処理を書いていく。
例えば、どのモデルに対しても登録日時createdで降順にfindしたいってことだったら、共通モデルの方に、

    public function beforeFind($queryData) {
        $queryData['order'][] = 'created DESC';

        return $queryData;
    }

といれておく。Coffeeモデルについてだけは、追加でidで昇順にしたかったら、Coffee.phpの方に

    public function beforeFind($queryData) {
        $queryData = parent::beforeFind($queryData);
        $queryData['order'][] = 'id';
        return $queryData;
    }

と追加すればいい。コントローラ側からソート順を指定したい、とかだったら、共通モデルの方に、

    public $sort = '';
    public function beforeFind($queryData) {
        $queryData['order'][] = 'created  ' . $this->sort;

        return $queryData;
    }

として、コントローラで、

    $this->Coffee->sort = 'DESC';

とセットしてやればよい。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14