Cakephp2まで、「仮想フィールド」が積極的に使われていたイメージ?(超主観)があるのですが、Cake3やCake4でも仮想フィールドの作成はできます。
最近はCake2とCake3、4と横断して触る機会が多いのですが、Cake3とCake4での仮想プロパティのアクセス方法に違いが明確にあるので記しておきます。(まあ、ドキュメントみりゃわかるんですが・・)
Cake3で、仮想フィールド(プロパティ)を作成する際、モデルのエンティティディレクトリに定義します。
code
<?php
namespace App\Model\Entity;
use Cake\ORM\Entity;
class Hoge extends Entity
{
protected $_virtual = ['fuga'];
protected function _getFuga()
{
return $this->_properties['name']; // Cake3
return $this->name; // Cake4
}
}
コードとしては、全くおかしいですが、Cake3とCake4での書き方自体はほぼ一緒なので、それぞれのアクセス方法を無理やり記述しました。
使用しているバージョンに合わせて記述すればアクセスが可能になります。
もちろん、Cake4で_properties
にアクセスしようとすると、null じゃ!!と言われるの注意です。
仮想フィールドを作成する際の決まりとしては、(Cake3、Cake4共通)
- エンティティファイル内に、$_virtualというメンバ変数を定義
- アクセスするためのメソッド名は接頭辞に_getをつけて、かつ$_virtualで付けた名前(キャメルケース)
- (返り値を期待する形に記述して)returnさせる
あとは、findなどでentityを呼び出した際に、仮想フィールドがひっついた状態で取得できるようになります。
まあ、ワシがCake4触ってる時に、ちょっと躓いたことなんですけどね(オチ)
■ Cake公式Doc 仮想プロパティの生成
https://book.cakephp.org/4/ja/orm/entities.html#entities-virtual-properties
以上ですー