У меня есть следующий базовый запрос, который я использую для извлечения коллекций с их отношениями, областями действия, сортировкой, фильтрацией, ... Этот базовый запрос используется почти во всех моих моделях путем расширения класса, в котором находится этот базовый запрос.
return $this->runSortQuery(
$query->when($request->has('filter'),
function($query) use ($request) {
return $query->search($request->filter);
}
)->when($request->has('with'),
function($query) use ($request) {
return $query->with(
explode(',', $request->with)
);
}
)->when($request->has('scopes'),
function($query) use ($request) {
return $query->scopes(
json_decode($request->scopes, true)
);
}
) /* and so on... */, $request
)->paginate((isset($request->paginate)) ? $request->paginate : 15);
Возможно ли заменить обратный вызов в каждом when
вызовом пользовательской функции?Причина, по которой я этого хочу, заключается в том, что эта базовая функция становится действительно длинной, и я хотел бы, чтобы метод в обратном вызове был в ее собственной функции, для удобства чтения и для обеспечения удобства обслуживания.
Я пробовал это, но это, очевидно, делаетне работа.
$query->when($request->has('filter'), $this->filter($query, $request->filter))
->when($request/* and so on... */);
Можно ли это сделать по-другому или каков будет хороший шаблон или метод для этого?