0

我正在尝试对喜欢的表进行查询

tbl_bottle

name | type | location
bot1    A       USA
bot2    B       
bot3    C       USA
bot4    A        UK
bot5    A        UK

所以当我加载前端时它会显示这个

name | type | location
bot1    A       USA
bot1    B       
bot3    C       USA
bot4    A        UK
bot5    A        UK

但是当我输入bot1搜索时它应该给我:

name | type | location
bot1    A       USA
bot1    B       

但我得到的是

name | type | location
bot1    A       USA
bot1    B       
bot3    C       USA

这就是我的控制器中的内容

     $bottle= tbl_bottle::select(
                'name',
                'type',
                'location'            
            )->where('location','=','USA')->OrWhere('location','=',' ');

return DataTables::of($bottle)
            ->addColumn('action', function ($bottle) {
                return '<a href="#" class="btn btn-xs btn-primary got=to" id="' . $members->name. '">View Details</a>';
            })->make(true);

所以数据表正确显示但是当我尝试搜索时它无法正常工作我的意思是当我搜索时

所以在我的前端我只有

<table id="tbl_bottles" class="table">
<th>Name</th>
<th>Type</th>
<th>Location</th>
<th>Action</th>
</table>
    <script type="text/javascript">
$(document).ready(function () {
    $('#tbl_bottles').DataTable({
        "processing": true,
        "serverSide": true,
        "ajax": "{{ route('ajax.getBottles') }}",
        "columns": [
            { "data": 'name'},
            {"data": "type"},
            {"data": "location"},
            {"data":"action",orderable:false,searchable:false}
        ],
    });
});
</script>

搜索输入被数据表插入,我使用的文档是https://github.com/yajra/laravel-datatables

4

3 回答 3

1

如果你想按瓶名搜索,那么首先你必须将搜索key word(瓶名)连同请求一起发送,这样你就可以在方法中得到它。

将搜索发送到key word您的view

<form>
  <input type="text" name="key_word" />
  <button type="submit">Submit</button>
</form> 

在你的controller,得到key word

获取关键字并将其分配给变量,然后在查询瓶子时添加变量,where clause如下所示:

public function getBottles(Request $request){
  $keyWord = $request->key_word; // get the key word and assign it to a variable 
  $bottle= tbl_bottle::select(
                'name',
                'type',
                'location'            
            )->where('name','=', $keyWord)->

return DataTables::of($bottle)
            ->addColumn('action', function ($bottle) {
                return '<a href="#" class="btn btn-xs btn-primary got=to" id="' . $members->name. '">View Details</a>';
            })->make(true);
}

在您直接user input进入流程之前,您必须对其进行验证,但这些事情超出了这个问题的边界。我的回答只针对你所要求的。

于 2019-08-14T06:30:11.690 回答
0

所以这对我有用

$bottle= tbl_bottle::select(
  'name',
  'type',
  'location'            
)->where(function($query) {
  $query->where('location','=','USA')->OrWhere('location','=',' ')
});

return DataTables::of($bottle)->make(true);
于 2019-08-19T21:04:19.010 回答
0

使用此代码(用于原始查询)

$searchValue = $request->input('search')['value']; // Search value from datatable
//-- END DEFAULT DATATABLE QUERY PARAMETER

//-- START DYNAMIC QUERY BINDING
$conditions = '1 = 1';
if (!empty($searchValue)) {
    $conditions .= " AND name LIKE '%" . trim($searchValue) . "%'";
}
//-- END DYNAMIC QUERY BINDING

//-- WE MUST HAVE COUNT ALL RECORDS WITHOUT ANY FILTERS
$countAll = \App\tbl_bottle::count();

//-- CREATE DEFAULT LARAVEL PAGING
$paginate = \App\tbl_bottle::select('*')
    ->whereRaw($conditions)
    ->paginate($limit, ["*"], 'page', $page);

或者您可以查看我的博客文章Laravel数据表了解更多详细信息。它也提供排序和搜索。

于 2020-06-01T07:32:16.333 回答