Добавить повторяющуюся часть в запросы Ларавел
есть фильтр по дате и множество запросов. Можно ли не повторяя условия фильтра добавлять в запросы фильтрацию?
$query = Leads::orderBy('created_at', 'desc');
if (request()->filled('date_start')) {
$query->where('created_at', '>=', $request->date_start);
}
if (request()->filled('date_end')) {
$query->where('created_at', '<=', $request->date_end);
}
...
$q1 = $query->where('operator', '=', $user->id)->where('status','New')->count();
$q2 = $query->where('operator', '=', $user->id)->where('status','New2')->count();
$q3 = $query->where('operator', '=', $user->id)->where('status','New3')->count();
...
В данном примере с $q2 равно 0, так как участвует запрос с $q1.
Ответы (1 шт):
Автор решения: Alexander Semikashev
→ Ссылка
Для этого вы можете использовать clone.
$query = Leads::orderBy('created_at', 'desc');
if (request()->filled('date_start')) {
$query->where('created_at', '>=', $request->date_start);
}
if (request()->filled('date_end')) {
$query->where('created_at', '<=', $request->date_end);
}
$q1 = (clone $query)->where('operator', '=', $user->id)->where('status','New')->count();
$q2 = (clone $query)->where('operator', '=', $user->id)->where('status','New2')->count();
$q3 = (clone $query)->where('operator', '=', $user->id)->where('status','New3')->count();
Если не ошибаюсь, в Laravel ещё можно было так:
$q1 = $query->clone()->where('operator', '=', $user->id)->where('status','New')->count();