Laravel. m2m запрос через промежуточную таблицу

Есть две модельки - работники и отделы связаны м2м, и промежуточная таблица без модели (id, employee_id, department_id). Работник может работать в нескольких отделах. В листинге отделов нужно выводить максимальную заработную плату среди сотрудников конкретного отдела. В самом простом случае в шаблоне пишем

{{ $department->staff()->max('salary') }}

Получается очень не красиво, если добавим работника который будет работать во всех отделах одновременно, соответственно у него будет самая большая ЗП ну и само собой в листинге напротив каждого отдела получим одну и ту же сумму. И тут нужно отдельная логика. Поэтому я сделал так: с промежуточной таблицы выбираем всех работников которые работают больше чем в одном (в нескольких) отделе, а точнее их id:

$staffIDs = DB::table('department_staff')
            ->distinct('employee_id')
            ->groupBy('employee_id')
            ->havingRaw('count(department_id) > ?', [1])
            ->select('employee_id');

Дальше в шаблоне берем всех работников которые работают в конкретном отделе и выключаем универсальных сотрудников:

{{ $department->staff()->whereNotIn('employee_id', $staffIDs)->max('salary') }}

Теперь наконец сами вопросы:

  1. Как элегантнее можно организовать запрос к БД;

  2. Лучше такие запросы делать по средствам ОРМ или методом

    select('some SQL code');

  3. Куда с контроллера спрятать этот кусок кода? В модель или создать какойто хелпер;

  4. В шаблоне может быть такой кусок запроса?

Спасибо!


Ответы (0 шт):