2012-02-13 105 views
0

我使用CakePHP 2.0查找操作,我有这个 'virtualFields' 模型: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,但这不是很好,尤其是如果我改变它的话。

此致敬礼。

回答

1

使用group by而不是distinct并完全删除字段选项。

$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);