マルチサイト アプリケーションの製品モデルがあります。
ドメイン(サイト)に応じて、異なるデータをロードしたい。
たとえば、データベースにname
anddescription
フィールドを持つ代わりに、posh_name、cheap_name、posh_description、cheap_description があります。
次のように設定した場合:
class Product extends AppModel
{
var $virtualFields = array(
'name' => 'posh_name',
'description' => 'posh_description'
);
}
その後、モデルから直接アクセスするか、関連付けを介してアクセスするかに関係なく、常に機能します。
しかし、ドメインによって異なる仮想フィールドが必要です。まず、2 つのセットを作成します。
var $poshVirtualFields = array(
'name' => 'posh_name',
'description' => 'posh_description'
);
var $cheapVirtualFields = array(
'name' => 'cheap_name',
'description' => 'cheap_description'
);
これらは私の 2 つのセットですが、ドメインに基づいて正しいものを割り当てるにはどうすればよいですか? isCheap()
ローエンドドメインにいるかどうかを知らせるグローバル関数があります。
だから私はこれを試しました:
var $virtualFields = isCheap() ? $this->cheapVirtualFields : $this->poshVirtualFields;
これは私にエラーを与えます。どうやら、このようなクラス定義で変数を割り当てることはできません。
したがって、代わりにこれを Product モデルに入れます。
function beforeFind($queryData)
{
$this->virtualFields = isCheap() ? $this->cheapVirtualFields : $this->poshVirtualFields;
return $queryData;
}
これは、データがモデルから直接アクセスされる場合にのみ機能し、モデルの関連付けを介してデータにアクセスされる場合は機能しません。
これを正しく機能させる方法が必要です。どのように?