2012-02-13 44 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);