Laravel-如何在DB Raw中按下拉列表过滤

时间:2019-07-05 13:39:53

标签: laravel

我有这个模型课:

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

我该如何修改我的模型,视图和控制器?

2 个答案:

答案 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>