「オンザフライ」で仮想フィールドを作成する方法は(私が知っている限り)ありません。仮想フィールドとは、検索がモデルを実行するときに実行され、「他のモデルフィールドと一緒にモデルのキーの下でインデックスが作成される」 「任意のSQL式」です。
「動的に作成された仮想フィールド」をどうする必要がありますか?何を達成する必要があるかを正確に説明すると、別の(さらに適切な?:))ソリューションを提供できる可能性がありますか?私は個人的にあなたを助けたいと思います。
質問を編集した後、取得しているのは配列が返される方法であると言えます。これは、fieldsパラメーターが原因です。別の構造を取得したい場合は、コールバックを適用してフォーマットすることをお勧めします。まず、メソッドをCaseMaster Model
:内に移動します。
public function getMaxCaseCount($client_id){
$data = $this->find('first', array(
'conditions' => array(
'CaseMaster.CLIENT_ID' => $client_id,
'CaseMaster.CASE_NO LIKE' => '%-%'),
'fields' => array('max(CaseMaster.CASE_NO) AS MAX_NO')));
return array_map(array('CaseMaster', '__filterMaxCaseCount'), $data);
}
private function __filterMaxCaseCount($input){
//This is just an example formatting
//You can do whatever you would like here.
$output['CaseMaster'] = $input[0];
return $output;
}
array_map関数は、コールバックメソッドを適用して、次__filterMaxCaseCount
のように呼び出します。
$this->CaseMaster->getMaxCaseCount($client_id);
コントローラから、必要な方法でデータを取得します。array_map関数も次のようになります。
return array_map(array($this, '__filterMaxCaseCount'), $data);
あなたは同じクラスにいるからです。