Есть несколько способов сделать это.
Первый - это если вы заключите ваши условия в операторы if:
if ($request->from_date != '' && $request->to_date != '') {
$salesQuery = Sales::where('publish', 1)
->whereBetween('created_at', [$request->from_date, $request->to_date]);
if ($request->input('current_id')) {
$salesQuery->where('currency_id', $request->input('currency_id'));
}
if ($request->input('company_id')) {
$salesQuery->where('company_id', $request->input('company_id'));
}
$sales = $salesQuery->get();
}
В качестве альтернативы вы можете использовать when () :
if ($request->from_date != '' && $request->to_date != '') {
$sales = Sales::where('publish', 1)
->whereBetween('created_at', [$request->from_date, $request->to_date])
->when($request->input('current_id'), function ($query) use ($request) {
$query->where('currency_id', $request->input('currency_id'));
})
->when($request->input('company_id'), function ($query) use ($request) {
$query->where('company_id', $request->input('company_id'));
})
->get();
}
Наконец, измените свой оператор возврата, чтобы использовать только compact()
, чтобы он не выдавал ошибку, если даты не включенычто будет означать, что весь ваш метод контроллера будет выглядеть примерно так:
public function filterSale(Request $request)
{
$customer = \DB::table('companies')->where('category','customer')->pluck('comp_name', 'id');
$currencies = \DB::table('currencies')->orderBy('default', 'desc')->pluck('acronym', 'id');
if ($request->from_date != '' && $request->to_date != '') {
$sales = Sales::where('publish', 1)
->whereBetween('created_at', [$request->from_date, $request->to_date])
->when($request->input('current_id'), function ($query) use ($request) {
$query->where('currency_id', $request->input('currency_id'));
})
->when($request->input('company_id'), function ($query) use ($request) {
$query->where('company_id', $request->input('company_id'));
})
->get();
}
return view('reports.salesReport', compact('sales', 'currency', 'company', 'customer', 'currencies'));
}
NB Вам не нужно вызывать all()
после pluck()
.