laravel объединение со средним значением столбца в другой таблице - PullRequest
0 голосов
/ 28 января 2020

У меня есть модель Food и модель Review. в моей таблице отзывов в базе данных у меня есть два столбца: food_id и rate. Каждый пользователь может оценивать продукты и оценивать их как целое число от 1 до 5.

Мне нужно получить все записи в таблице продуктов и столбец среднего показателя в обзорах, где food_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

1 Ответ

1 голос
/ 28 января 2020
$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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...