mysql - laravel 连接另一个表中的列的平均值

标签 mysql laravel

我有一个 Food 模型和 Review 模型。在数据库中的评论表中,我有两列: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]:语法错误

如何连接另一个表中列的平均值?

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' => falseconfig/database.php

关于mysql - laravel 连接另一个表中的列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59938942/

相关文章:

php - Laravel 5 - 根据需要验证数组,但允许传递空数组

java - 字符串长度的差异(数据库 - .txt 文件)

mysql - MySQL 中的排名函数

php - Laravel 5.1 迁移报错自增primary

php - 使用 Vue Js 和 Azure Pipeline 实现 Azure Key Vault 的最佳方法

php - Laravel 路由组第二个参数?

email - Laravel 全局发送地址进行测试

Laravel Eloquent vs DB外观: Why use Eloquent and decrease performance?

mysql - 如何使两个表条件更新一个表

mysql - SQL 查询组合列值