laravel数据表中的自定义查询

时间:2019-08-14 05:34:51

标签: laravel laravel-datatables

我正在尝试对像这样的表进行查询

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

3 个答案:

答案 0 :(得分:0)

如果要按瓶名进行搜索,则首先必须将搜索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处理之前,您必须先进行验证,但是这些事情不在此问题范围之内。我的答案仅针对您的要求。

答案 1 :(得分:0)

所以这对我有用

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

return DataTables::of($bottle)->make(true);

答案 2 :(得分: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 datatables了解更多详细信息。它也提供排序和搜索。