Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 20.09.2019 19:22:40

Помогите исправить запрос

Привет. Есть две таблицы 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();
        }

Мне нужно исправить запрос так, чтобы список содержал только компании с вакансиями.

Не в сети

#2 21.09.2019 11:41:20

Re: Помогите исправить запрос

У тебя тут не один запрос, а три. Причем два в цикле smile Тебе исправить три запроса?

Можно сделать в одно выражение Eloquent используя фишку withCount. Если есть фильтрующее условие типа state=1, то оно должно быть также указано в описании связи, либо в самом запросе через whereHas().


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 21.09.2019 17:08:48

Re: Помогите исправить запрос

Спасибо за подсказки.
Вот так работает:

$firm = Firms::whereHas('vacancy', function (Builder $query) {
             $query->where('state', 1);
         }, '>=', 1)->paginate(25);

Не в сети

Подвал раздела