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') }}
Теперь наконец сами вопросы:
Как элегантнее можно организовать запрос к БД;
Лучше такие запросы делать по средствам ОРМ или методом
select('some SQL code');
Куда с контроллера спрятать этот кусок кода? В модель или создать какойто хелпер;
В шаблоне может быть такой кусок запроса?
Спасибо!