Laravel 5.8 - Запрос со средним числом просмотров и порядком в таблице статистики - PullRequest
0 голосов
/ 18 июня 2019

Я использую Laravel 5.8, и я хочу вычислить среднее число просмотров в статистической таблице.

Таблица статистики имеет столбец в виде post_id.

Я хочу рассчитать среднее количество просмотров с помощью этой операции:

Просмотры пользователя / всех просмотров = среднее количество просмотров

Код

$totalViews = Statistic::whereHas('post', function ($query) use ($user) {
     $query->where('posts.user_id', $user->id);
})->where('created_at', '>=', Carbon::now()->subYear(1))->count();

$globalViews = Statistic::where('created_at', '>=', Carbon::now()->subYear(1))->count();

$rate = round($totalViews / $globalViews * 100, 0);

Я хочу сделать единственный запрос, потому что я хочу выставить orderBy по моему запросу.

SQL-запрос

SELECT users.first_name, ROUND(COUNT(statistics.id) / (
SELECT COUNT(*)
FROM statistics) * 100, 2) AS average
FROM users
LEFT JOIN posts ON users.id = posts.user_id
LEFT JOIN statistics ON posts.id = statistics.post_id
GROUP BY users.id;

Laravel DB

$users = DB::table('users')
     ->select('users.first_name', DB::raw('ROUND(COUNT(statistics.id) / (SELECT COUNT(*) FROM statistics) * 100, 2) AS average'))
     ->leftJoin('posts', 'users.id', '=', 'posts.user_id')
     ->leftJoin('statistics', 'posts.id', '=', 'statistics.post_id')
     ->groupBy('users.id')
     ->get();

Возможно ли это сделать с помощью гидратации Eloquent?

...