为什么if条件不能过滤结果?

时间:2019-03-28 01:11:01

标签: ajax laravel-5 filtering

我想根据用户选择的某些条件创建高级搜索过滤人员数据。该应用程序是使用laravel 5开发的。我正在使用ajax函数和if语句查询数据以过滤条件。结果会出现,但不会过滤if语句中的任何条件。

过滤条件的控制器是这样的:

  public function kakitangan(Request $request)
  {
    $query = DB::table('itemregistrations')
             ->select('itemregistrations.ItemRegistrationID','itemregistrations.name', 'itemregistrations.Nobadan');

    if ($request->section != ""){
        $query->where('SectionID', $request->section);
    }

    $newitem = $query->get();

    return response::json($newitem);
  }

我也尝试过:

    $query = DB::table('itemregistrations')
             ->select('itemregistrations.ItemRegistrationID','itemregistrations.name', 'itemregistrations.Nobadan');

    if(request('section')) {
        $query->where('SectionID', request('section'));
    }
  $newitem = $query->get();

  return response::json($newitem);

但是结果是相同的。itemregistrations中的所有数据都出现在输出页面中。尽管我选择了其他部分条件。

这是可供选择的查看页面代码:

            <div class="row">
              <div class="col-lg-2"> 
                {{ Form::label('Seksyen', 'Seksyen') }}
              </div>
              <div class="col-lg-2"> 
                {{ Form::select('section', $sections, '', ['class' => 'form-control select2', 'placeholder' => '--pilih--']) }}
              </div>
            </div>
          </div>

选择ID来自控制器功能:

     $sections = Section::pluck('sectionname', 'SectionID');
    //sent to html view
    return view('carian.index', compact('sections'));

调用ajax函数以获取查询的按钮:

   <button class="btn btn-primary btn-md" id="cari">Cari</button>

结果代码出现:

   <script type="text/javascript">
      $( "#cari" ).click(function() {

        var seksyen = $("#section").val();
         $.ajax({
            url: '{{ url('kakitangan') }}',
            data: {'section': seksyen},
            dataType: 'json',
            success: function (data) {
                console.log(data);
                $('#datatable tr').not(':first').not(':last').remove();
                var html = '';
                for(var i = 0; i < data.length; i++){
                    html += '<tr>'+
                                '<td>' + data[i].name + '</td>' +
                            '</tr>';
                    }   
                $('#datatable tr').first().after(html);
            },
            error: function (data) {
            }
        });
      });
   </script>

当用户选择一个部分时,仅该部分的职员会出现。但是现在,在选择任何部分时所有人员都会出现。

我只是尝试使用controller中的this来测试段值是否正确传递给了控制器:

    $try=$request->input('section');
    return response::json($try);

结果为空数组。没有值传递?节值未正确传递吗?如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在执行GET请求时,您将该节作为发布参数传递。 使用jQuery,您可以使用以下命令将其作为查询字符串发送:

 var seksyen = $("#section").val();
     $.ajax({
        url: '{{ url('kakitangan') }}?' + $.param({'section': seksyen}),
        dataType: 'json',
        ...

在您的控制器中,您还可以使用针对请求的has方法来明确检查请求是否包含查询字符串

if(request()->has('section')) {
    $query->where('SectionID', request('section'));
}

编辑:

使用laravel集体表单助手,您可以使用以下内容指定字段ID(请注意第四个参数ID)

{{ Form::select('section', $sections, '', ['id' => 'section', 'class' => 'form-control select2', 'placeholder' => '--pilih--']) }}