AVG で平均を取った後の、小数点以下の四捨五入についてのコードが公式含め見当たらなかったので書き残しておきます。MySQL前提です。
例えば以下の要件を満たす場合です。
- 商品の評価の平均値
- 小数点第一位で四捨五入したい
コード
$query = $this->Products->find();
$result = $query
->select([
'average_evaluation_rating' => $query->func()->round([$query->func()->avg('Products.evaluation'), 1]),
])
(以下略)
解説
MySQLだと以下のように書くところを
ROUND(AVG(Products.evaluation), 1)
CakePHP4 だと以下のように書きます。
$query->func()->round([roundしたい内容, 四捨五入する小数点の位置])
AVG も関数を使って書くべきなので、round したい内容に
$query->func()->avg('Products.evaluation')
と書いています。
実行されるクエリ
SELECT
(round(AVG(Products.evaluation), '1')) AS average_evaluation_rating
FROM
products Products
(以下略)