我有一个食物模型和评论模型。在数据库的评论表中,我有两列:food_idrate。每个用户都可以对食物进行评分,评分是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

07-25 21:57