beforeFind()
現在のユーザーの ID をクエリに挿入する必要があるため、現在仮想フィールドをアタッチしています。関連モデルで find を呼び出し、このモデルを含むと、静的に定義された仮想フィールドが含まれますが、 . 内の仮想フィールドは含まれませんbeforeFind()
。モデルで直接 find を呼び出すと、動的にアタッチされた仮想フィールドが含まれます。
これが私の beforeFind コールバックです:
public function beforeFind($query = array()) {
$user_id = $this->getCurrentUser()['id'];
$this->virtualFields = array_merge($this->virtualFields, array(
'cost_for_user' => sprintf('CASE WHEN Inventory.user_id = %s THEN Inventory.cost ELSE Inventory.cost_for_team END', $user_id),
));
return $query;
}
beforeFind に動的にアタッチされているため、クックブックcost_for_user
で提案されているように、実行時に仮想フィールドをコピーすることはできません。仮想フィールドを動的にアタッチするためのより良いコールバックはありますか?