我有一个 Food 模型和 Review 模型。在数据库中的评论表中,我有两列:food_id
和 rate
。每个用户可以对食物进行评分,评分为1~5之间的整数。
我需要获取食品表中的所有记录以及评论中的平均费率列,其中 food_id 是每种食品的 ID。
$foods = Food::join('reviews', 'foods.id', '=', 'reviews.food_id')->select(
'foods.*',
'AVERAGE(reviews.rate) WHERE reviews.food_id = foods.id AS food_rate'
)->get();
当然,这段代码会引发SQLSTATE[42000]:语法错误
如何连接另一个表中列的平均值?
SELECT foods.*, AVG(reviews.rate) AS food_rate
FROM foods
LEFT OUTER JOIN reviews
ON reviews.food_id = foods.id
GROUP BY foods.id
其实这个MYSQL代码需要用Laravel来写
最佳答案
$foods = Food::select(
'*',
\DB::raw('AVG(reviews.rate) AS food_rate'),
)->leftJoin('reviews', 'foods.id', '=', 'reviews.food_id')->groupBy('foods.id');
我们需要设置'strict' => false
在config/database.php
关于mysql - laravel 连接另一个表中的列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59938942/