Как правильно оптимизировать запрос к базе данных в Laravel 2?
Всем привет, подскажите пожалуйста как можно в этом случае улучшить запрос к бд в Laravel?
в репозитории есть такие два метода
public function getCountAdverts(): array
{
return [
Advert::STATUS_PUBLISHED => $this->getCount(Advert::STATUS_PUBLISHED),
Advert::STATUS_CLOSED => $this->getCount(Advert::STATUS_CLOSED),
Advert::STATUS_NOT_PUBLISHED => $this->getCount(Advert::STATUS_NOT_PUBLISHED),
Advert::STATUS_MODERATION => $this->getCount(Advert::STATUS_MODERATION),
];
}
private function getCount(string $status): int
{
return Advert::where('status', $status)->count();
}
как то можно такой же массив получить только без 4 обращений к бд?
Ответы (1 шт):
Автор решения: Eugene
→ Ссылка
Должно помочь: Grouping.
$collection = DB::table('adverts')
->select(DB::raw('count(*) as count, status'))
->groupBy('status')
->get();
$keyed = $collection->mapWithKeys(function ($item) {
return [
$item->status => $item->count
];
});
return $keyed->toArray();
Если проблема в том, что всё очень медленно, нужно сделать индекс по полю статус. Либо хранить количества в отдельной табличке и при каждом телодвижение их обновлять.. такое себе, конечно...

