Эффективные способы расчета среднего значения с использованием быстрой загрузки в Laravel

В Laravel нетерпеливая загрузка — это метод, позволяющий сократить количество запросов к базе данных при получении связанных данных. Это значительно повышает производительность за счет получения всех необходимых данных в одном запросе. В этой статье мы рассмотрим различные методы расчета среднего значения с использованием быстрой загрузки в Laravel, а также приведем примеры кода.

Метод 1: использование метода avg() коллекции

$users = User::with('posts')->get();
$average = $users->avg(function ($user) {
    return $user->posts->avg('rating');
});

Метод 2: использование метода selectRaw() конструктора запросов

$average = User::with(['posts' => function ($query) {
        $query->selectRaw('AVG(rating) as average');
    }])
    ->get()
    ->pluck('posts.0.average')
    ->avg();

Метод 3: использование методов Eloquent withCount() и select()

$users = User::withCount(['posts' => function ($query) {
        $query->select(DB::raw('AVG(rating) as average'));
    }])
    ->get();
$average = $users->avg('posts_count');

Метод 4. Использование выражения DB::raw() в Laravel

$users = User::with('posts')
    ->select('users.*', DB::raw('(SELECT AVG(rating) FROM posts WHERE posts.user_id = users.id) as average'))
    ->get();
$average = $users->avg('average');

Метод 5: реализация пользовательского атрибута в модели
Добавьте следующий метод в модель пользователя:

public function getAverageRatingAttribute()
{
    return $this->posts()->average('rating');
}

Тогда вы можете просто использовать:

$users = User::with('posts')->get();
$average = $users->avg('average_rating');

Применяя методы быстрой загрузки в Laravel, мы можем эффективно рассчитывать средние значения, оптимизируя при этом производительность. В этой статье мы рассмотрели несколько методов, в том числе использование методов сбора, методов selectRaw(), withCount() и select() конструктора запросов, выражений DB::raw() и реализацию пользовательских атрибутов в моделях. Выберите метод, который лучше всего соответствует требованиям вашего приложения, и наслаждайтесь повышенной производительностью.