为dateRange和Laravel中的其他关联字段创建条件

为dateRange和Laravel中的其他关联字段创建条件,laravel,if-statement,conditional-statements,Laravel,If Statement,Conditional Statements,我正在尝试创建一个销售筛选页面,用户可以在其中设置日期范围,如果他们愿意,还可以将货币和客户姓名设置为筛选的一部分 public function filterSale(请求$Request) { $customer=\DB::table('companys')->where('category','=','customer')->pull('comp_name','id')->all(); $currences=\DB::table('currences')->orderBy('defaul

我正在尝试创建一个销售筛选页面,用户可以在其中设置日期范围,如果他们愿意,还可以将货币和客户姓名设置为筛选的一部分

public function filterSale(请求$Request)
{
$customer=\DB::table('companys')->where('category','=','customer')->pull('comp_name','id')->all();
$currences=\DB::table('currences')->orderBy('default','desc')->pull('acronym','id')->all();
$currency=$request['currency_id'];
$company=$request['company_id'];
如果($request->from_date!=''&&$request->to_date!=''| |$request['currency_id']!''
||$request['company_id']!=''){
$sales=sales::其中('publish','=',1)
->其中('created_at',array($request->from_date,$request->to_date))
->其中('currency_id','=',$currency)
->其中('company_id','=',$company)
->get();
返回视图('reports.salesReport',compact('sales',$sales))
->带('currency',$currency)
->带('company',$company)
->带('customer',$customer)
->带('货币',$货币);
}
}
我试图实现的是,如果用户设置dateRage并将货币和客户保留为空,则数据应显示所有,而不考虑其货币和它所属的客户

或Customer+datetrage或currency+dateRange或currency+Customer+daterage

我怎样才能做到这一点


提前非常感谢

有几种方法可以做到这一点

第一种方法是在if语句中封装条件:

if($request->from\u date!=''&&$request->to\u date!=''){
$salesQuery=Sales::where('publish',1)
->其中('created_at',[$request->from_date,$request->to_date]);
如果($request->input('current_id')){
$salesQuery->where('currency\u id',$request->input('currency\u id');
}
如果($request->input('company_id')){
$salesQuery->where('company_id'),$request->input('company_id');
}
$sales=$salesQuery->get();
}

或者,您可以使用:

if($request->from\u date!=''&&$request->to\u date!=''){
$sales=sales::其中('publish',1)
->其中('created_at',[$request->from_date,$request->to_date])
->当($request->input('current_id')时,函数($query)使用($request){
$query->where('currency\u id',$request->input('currency\u id');
})
->当($request->input('company_id')时,函数($query)使用($request){
$query->where('company_id',$request->input('company_id');
})
->get();
}

最后,将return语句更改为仅使用
compact()
,这样,如果不包括日期,它就不会抛出错误,这将意味着整个控制器方法类似于:

public function filterSale(请求$Request)
{
$customer=\DB::table('companys')->where('category','customer')->pull('comp_name','id');
$currences=\DB::table('currences')->orderBy('default','desc')->pull('acronym','id');
如果($request->from_date!=''&&$request->to_date!=''){
$sales=sales::其中('publish',1)
->其中('created_at',[$request->from_date,$request->to_date])
->当($request->input('current_id')时,函数($query)使用($request){
$query->where('currency\u id',$request->input('currency\u id');
})
->当($request->input('company_id')时,函数($query)使用($request){
$query->where('company_id',$request->input('company_id');
})
->get();
}
返回视图('reports.salesReport',compact('sales','currency','company','customer','currency');
}

NB您不需要在
pluck()
之后调用
all()

有几种方法可以做到这一点

第一种方法是在if语句中封装条件:

if($request->from\u date!=''&&$request->to\u date!=''){
$salesQuery=Sales::where('publish',1)
->其中('created_at',[$request->from_date,$request->to_date]);
如果($request->input('current_id')){
$salesQuery->where('currency\u id',$request->input('currency\u id');
}
如果($request->input('company_id')){
$salesQuery->where('company_id'),$request->input('company_id');
}
$sales=$salesQuery->get();
}

或者,您可以使用:

if($request->from\u date!=''&&$request->to\u date!=''){
$sales=sales::其中('publish',1)
->其中('created_at',[$request->from_date,$request->to_date])
->当($request->input('current_id')时,函数($query)使用($request){
$query->where('currency\u id',$request->input('currency\u id');
})
->当($request->input('company_id')时,函数($query)使用($request){
$query->where('company_id',$request->input('company_id');
})
->get();
}

最后,将return语句更改为仅使用
compact()
,这样,如果不包括日期,它就不会抛出错误,这将意味着整个控制器方法类似于:

public function filterSale(请求$Request)
{
$customer=\DB::table('companys')->where('category','customer')->pull('comp_name','id');
$currences=\DB::table('currences')->orderBy('default','desc')->pull('acronym','id');
如果($request->from_date!=''&&$request->to_date!=''){
$sales=sales::其中('publish',1)
->其中('created_at',[$request->from_date,$request->to_date])
->当($request->input('current_id')时,函数($query)使用($request){
$query->