次のクエリは、適切な ID を含む配列を返しますが、すべての値が null です。
集計関数(AVG()
)を削除すると、値が返されます(もちろん平均値ではありません)。たとえばfind('all')
、平均値を返しますが、希望するリスト形式ではありません(それで作業できますが、試してみたい最初にそれを行う'list'
)。
$progress = $this->Trial->find('list', array(
'fields' => array(
'Trial.session_id',
'AVG(Trial.first_reaction_time_since_probe_shown) AS average_reaction_time'
),
'group' => 'Trial.session_id',
'conditions' => array(
'Trial.first_valid_response = Trial.probe_on_top',
'TrainingSession.user_id IS NOT NULL'
),
'contain' => array(
'TrainingSession' => array(
'conditions' => array(
'TrainingSession.user_id' => $this->Auth->user('id')
)
)
),
'recursive' => 1,
));
生成された SQL クエリは、PhpMyAdmin 経由で DB に送信すると、必要な結果を正確に返します。
SELECT
`Trial`.`session_id`,
AVG(`Trial`.`first_reaction_time_since_probe_shown`) AS average_reaction_time
FROM
`zwang`.`trials` AS `Trial`
LEFT JOIN
`zwang`.`training_sessions` AS `TrainingSession` ON (
`Trial`.`session_id` = `TrainingSession`.`id` AND
`TrainingSession`.`user_id` = 1
)
WHERE
`Trial`.`first_valid_response` = `Trial`.`probe_on_top`
GROUP BY
`Trial`.`session_id`
find('list') のソースを調べました。クエリで関数を使用すると、リストにアクセスするための「配列パス」が台無しになるためだと思いますが、まだ修正できませんでした(またはCakePHPロジックの乱用を認識しました)。