2012-05-15 121 views
0

MySQL查詢我有這樣的MySQL查詢:CakePHP的 - 在查找方法

SELECT DISTINCT hours.project_id 
      , projects.name 
      , sum(hours.spent_hours) AS expr1 
      , sum(hours.invoiced_hours) AS expr2 
       , hours.description 
FROM 
    projects 
INNER JOIN hours 
ON projects.id = hours.project_id 
GROUP BY 
    hours.project_id 
, projects.id 
, projects.name 
, hours.description 

你將如何把碎片在CakePHP的find方法?我試了好幾次,但沒有任何運氣...

我發現這個在文檔:

array(
'conditions' => array('Model.field' => $thisValue), //array of conditions 
'recursive' => 1, //int 
'fields' => array('Model.field1', 'DISTINCT Model.field2'), //array of field names 
'order' => array('Model.created', 'Model.field3 DESC'), //string or array defining order 
'group' => array('Model.field'), //fields to GROUP BY 
'limit' => n, //int 
'page' => n, //int 
'offset'=>n, //int 
'callbacks' => true //other possible values are false, 'before', 'after' 

其它信息有關數據庫:

項目的hasMany小時。 小時屬於項目。 小時數是project_id。

CakePHP 2.1.2。

謝謝! :)

回答

1

我假設你在項目模型下面的行。

$result = $this->find(
    'all', 
    array(
     'fields' => array(
      'Hour.projetc_id', 
      'Project.id', 
      'Project.name', 
      'SUM(Hour.spent_hours) AS expr1', 
      'SUM(Hour.invoiced_hours) AS expr2', 
      'Hour.description' 
     ), 
     'group' => array(
      'Hour.projetc_id', 
      'Project.id', 
      'Project.name', 
      'Hour.description' 
     ) 
    ) 
); 

你也可以看看there您陣列管理計算字段。

最後,我會建議看看Containable Behavior,因爲它可以加快您的數據庫查詢,並且只允許從數據庫中獲取所需的數據。