ビヘイビアはモデルの汎用的なメソッドを定義し、各モデルでビヘイビアを利用する宣言さえすれば、簡単に使い回せることができます。
Cake2からCake4への移行において、ビヘイビアのメソッド内にてモデルの参照の仕方の違いについてです。
Cake2: ビヘイビアでのモデル参照
class HogeBehavior extends ModelBehavior { public function getId($Model, $id) { $results = $Model->find('count', ['conditions' => ['id' => $id]]); return $results; } }
ありきたりなビヘイビアのコード例です。特徴としてCake2では第一引数 $Model
に、コール元の当該モデルオブジェクトが渡ってきていました。
Cake4: ビヘイビアのモデル参照
declare(strict_types=1); namespace App\Model\Behavior; use Cake\ORM\Behavior; class HogeBehavior extends Behavior { public function getId($id) { $results = $this->table()->find()->where(['id' => $id])->count(); return $results; } }
Cake4では $this->table()->find()
とすることで、コール元のデータベーステーブル名を取得してくれます。
■ Cakephp4: table()
https://api.cakephp.org/4.4/class-Cake.ORM.Behavior.html#table()