首页 > 解决方案 > 为什么 if 条件不过滤结果?

问题描述

我想根据用户选择的某些标准创建高级搜索过滤人员数据。此应用程序使用 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>

应该是当用户选择一个部分时,只出现该部分的工作人员。但是现在选择任何部分时都会出现所有五线谱。

我只是尝试在控制器中使用它来测试节值是否正确传递给控制器​​:

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

它导致空数组..没有传递值?是不是没有正确传递部分值?如何纠正这个问题?

标签: ajaxlaravel-5filtering

解决方案


您在执行 GET 请求时将该部分作为 post 参数传递。使用 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--']) }}

推荐阅读