我有这个模型课:
class Billings extends Model
{
protected $table = 'billings';
protected $fillable = [
'msisdn',
'created_at',
'amount',
'billing_channel',
];
protected $guarded = [
'id'
];
}
控制器
public function billingsReport(Request $request)
{
$billings = DB::table('billings')
->select(
'msisdn',
DB::raw('created_at as created_date'),
'amount',
'billing_channel'
)
->orderByRaw('created_at DESC');
$render=[];
if(isset($request->msisdn))
{
$billings=$billings->where('msisdn','like','%'.$request->msisdn.'%');
$render['msisdn']=$request->msisdn;
}
if(isset($request->billing_channel))
{
$billings=$billings->where('billing_channel','like','%'.$request->billing_channel.'%');
$render['billing_channel']=$request->billing_channel;
}
$billings= $billings->orderBy('created_at','DESC');
$billings= $billings->paginate(15);
$billings= $billings->appends($render);
$data['billings'] = $billings;
return view('report.billingsReport',$data);
}
请注意,Billing_channel字段位于Billings表中
查看
<div class="row" style="margin-bottom: 10px">
{{ Form::model(request(),['method'=>'get']) }}
<div class="col-sm-2">
{{ Form::text('msisdn',null,['class'=>'form-control','placeholder'=>'MSISDN']) }}
</div>
<div class="col-xs-2">
{{ Form::submit('Search',['class'=>'btn btn-warning']) }}
</div>
{{ Form::close() }}
</div>
msisdn的文本过滤器已在工作。
在我的控制器和视图中,我过滤了msisdn并在视图中使用了 form :: text 。现在的问题是,如何使用 form :: select
来过滤billing_channel我该如何修改我的模型,视图和控制器?
答案 0 :(得分:0)
获取一组可迭代的billingChannel,并将其传递给视图。
然后您可以在表单中添加以下内容:
<select name="billing_channel">
@foreach($billingChannel as $billingChannel)
<option value={{ $billingChannel->value }}>{{ $billingChannel->name }}</option>
@endforeach
</select>
您似乎已经在控制器中包含代码,因此这应该是您所需要的。
如果您想使用Laravel Collective的Form
门面,请看看他们的documentation,以了解如何使用它。
答案 1 :(得分:-2)
您的模型是正确的,但是对于控制器,我建议您使用模型来获取数据,对于前端,也可以使用select2
https://select2.github.io/select2/进行显示,并且填充可以帮助您进行过滤从选择中选择它,它非常易于使用,对于控制器,您可以使用以下命令:
public function billingsReport(Request $request)
{
$msisdn = $request->msisdn;
$billings = Billings::select('msisdn', 'created_at as created_date', 'amount', 'billing_channel')
->orderBy('created_at', 'DESC')
->when(isset($request->msisdn), function($query) use ($msisdn) {
$query->where('msisdn','like','%'.$msisdn.'%');
})
->paginate(15);
return view('report.billingsReport', compact('billings'));
}
对于您使用的视图:
<select class="form-control" id="yourid">
@foreach($billings as $billing)
<option value="{{ your key }}">{{ the filed that you want to display }}</option>
@endforeach
</select>