我有一个食物模型和评论模型。在数据库的评论表中,我有两列: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]: Syntax error
如何加入另一个表的平均列?
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