Добавить повторяющуюся часть в запросы Ларавел

есть фильтр по дате и множество запросов. Можно ли не повторяя условия фильтра добавлять в запросы фильтрацию?

$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();
→ Ссылка