Php 使用laravel查询生成器进行过滤还有其他方法吗?
我正在使用filter来显示数据,由于我对每个可能的条件都使用if-else子句,代码变得越来越长。有没有更好的方法来编写这些代码 这是我在过滤器上使用的示例代码之一 HTML代码:Php 使用laravel查询生成器进行过滤还有其他方法吗?,php,mysql,laravel,laravel-query-builder,Php,Mysql,Laravel,Laravel Query Builder,我正在使用filter来显示数据,由于我对每个可能的条件都使用if-else子句,代码变得越来越长。有没有更好的方法来编写这些代码 这是我在过滤器上使用的示例代码之一 HTML代码: <div class="well well-sm col-xs-12"> <div class="row"> <div class="col-sm-2 col-xs-12">
<div class="well well-sm col-xs-12">
<div class="row">
<div class="col-sm-2 col-xs-12">
<div class="form-group form-group-sm">
<label>Date </label>
<select class="form-control month" name="month">
<option value="1"> January </option>
<option value="2"> February </option>
<option value="3"> March </option>
<option value="4"> April </option>
<option value="5"> May </option>
<option value="6"> June </option>
<option value="7"> July </option>
<option value="8"> August </option>
<option value="9"> September </option>
<option value="10"> October </option>
<option value="11"> November </option>
<option value="12"> December </option>
</select>
<select class="form-control year" name="year">
<option value="2019"> 2019 </option>
<option value="2018"> 2018 </option>
<option value="2017"> 2017 </option>
<option value="2016"> 2016 </option>
<option value="2015"> 2015 </option>
<option value="2014"> 2014 </option>
<option value="2013"> 2013 </option>
<option value="2012"> 2012 </option>
<option value="2011"> 2011 </option>
<option value="2010"> 2010 </option>
<option value="2009"> 2009 </option>
</select>
</div>
</div>
<div class="col-sm-2 col-xs-12">
<div class="form-group form-group-sm">
<label>Customer</label>
<select class="form-control customer" name="customer">
<option value="all">All</option>
@foreach($customer_options as $key => $data)
<option value="{{ $data->ref_code}}">{{$data -> ref_code}}-{{ $data->name_t }}</option>
@endforeach
</select>
</div>
</div>
<div class="col-sm-3 col-xs-12">
<div class="form-group form-group-sm">
<label>Search Text </label>
<input type="text" name="search" class="form-control" id="search">
<input type="submit" name="" value="Show Data" id="show" class="btn btn-success btn-sm">
</div>
</div>
</div>
</div>
除了使用扩展的if-else子句之外,还有更好的方法使用更干净的代码进行过滤吗?
对于上面的示例,只有一个选项需要选择,即“客户”,要么获取所有客户,要么选择一个特定的客户。
对于我的其他表单,需要指定许多选项。编写这些代码而不重复条件以外的相同内容的替代方法是什么?是的,您可以使用它
->when($customer === 'all', function ($query) {
// Special query parts for all customers
}, function ($query) {
// Optional query parts for when not all customers
})
这种方法基本上与直接sql相同。请考虑实现ORM层。
->when($customer === 'all', function ($query) {
// Special query parts for all customers
}, function ($query) {
// Optional query parts for when not all customers
})