Я использую 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?