Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Привет. Есть две таблицы firms (id*,....), vacancy (id, firm_id*,...)
Данный запрос формирует список фирм с подсчетом вакансий в них.
$firm = Firms::like('firm_name', $request->q)->paginate(25);
foreach($firm as $item) {
$item->vacancy = Vacancy::where('firm_id', $item->id)->orderBy('created_at', 'desc')->first() ?? null;
$item->vacancy_quantity = Vacancy::where('firm_id', $item->id)->where('state', 1)->count();
}
Мне нужно исправить запрос так, чтобы список содержал только компании с вакансиями.
Не в сети
У тебя тут не один запрос, а три. Причем два в цикле Тебе исправить три запроса?
Можно сделать в одно выражение Eloquent используя фишку withCount. Если есть фильтрующее условие типа state=1, то оно должно быть также указано в описании связи, либо в самом запросе через whereHas().
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Спасибо за подсказки.
Вот так работает:
$firm = Firms::whereHas('vacancy', function (Builder $query) {
$query->where('state', 1);
}, '>=', 1)->paginate(25);
Не в сети
Страницы 1