没有办法(据我所知)“即时”创建虚拟字段。虚拟字段是“任意 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);
因为你们在同一个班级。