我正在使用CakePHP 2.0,我有一个带有'virtualFields'的模型:
Country.php:
var $virtualFields = array(
'path' => "CONCAT_WS('/', dirname, basename)"
);
如果我在使用“用户”的控制器中执行此操作
$users = $this->User->find('all');
设置了虚拟字段path
。
如果我在我的控制器中使用它,它也使用“用户”
$options['fields'] = array(
'DISTINCT User.*'
);
$options['joins'] = array(
array(
'table' => 'courses',
'type' => 'inner',
'conditions' => array(
'User.id = courses.user_id'
)
),
array(
'table' => 'times',
'type' => 'inner',
'conditions' => array(
'courses.id = times.course_id'
)
)
);
$options['conditions'] = array(
'times.amount > ' => 0
);
$users = $this->User->find('all', $options);
使用这些选项时,path
字段未设置,当然,SQL查询似乎没有包含“CONCAT_WS('/',dirname,basename)”字段,如果我包括在没有选项的情况下执行find
操作。
如果有选项,我可以做什么,以便自动包含虚拟字段?当然我可以用fields
选项写入CONCAT,但这不是很好,特别是如果我改变它。
最好的问候。
答案 0 :(得分:1)
使用group by而不是distinct,并完全删除fields选项。
$options['group'] = array(
'User.*'
);
$options['joins'] = array(
array(
'table' => 'courses',
'type' => 'inner',
'conditions' => array(
'User.id = courses.user_id'
)
),
array(
'table' => 'times',
'type' => 'inner',
'conditions' => array(
'courses.id = times.course_id'
)
)
);
$options['conditions'] = array(
'times.amount > ' => 0
);
$users = $this->User->find('all', $options);