в моем приложении у меня длинный список категорий. Я загружаю их с этим:
$categories = Categories::all();
В Categories
есть эта функция:
public function transactions()
{
return $this->hasMany(Transactions::class);
}
public function getPreviousActivityAttribute() {
return $this->transactions()
->where('date', '<' Carbon::now()->firstOfMonth())
->sum('amount');
}
Я отображаю этот список категорий в виде таблицы. Каждая строка вызывает $category->previousActivity
.
Это приводит к n + 1 запросам к базе данных, где n - количество категорий (и их много). Помимо previousActiviy
я также показываю другие агрегаты (некоторые делают SUM
другие делают AVG
, и т.д. c.).
Кстати. Есть много транзакций. Я не могу загрузить их все, используя Categories::with('transactions')->get()
. Это потребует слишком много памяти.
Есть ли способ увеличить нагрузку агрегатов? В построителе запросов есть метод withCount
, но здесь он не очень помогает.
Спасибо за помощь.