0

私はこのMySQLクエリを持っています:

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'

)。

データベースに関するその他の情報:

プロジェクトには多くの時間があります。時間はプロジェクトに属しています。時間単位はproject_idです。

CakePHP2.1.2。

ありがとうございました!:)

4

1 に答える 1

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

配列内の計算フィールドを管理するために、そこを見たいと思うかもしれません。

最後に、Containable Behaviorを確認することをお勧めします。これにより、DB クエリが高速化され、DB から必要なものだけを実際に取得できるようになります。

于 2012-05-16T10:59:14.963 に答える