如何解决方法 Yajra\DataTables\CollectionDataTable::where 不存在
我在 Laravel 项目中有一个数据表。我创建了一个下拉过滤器来过滤 KPI 列。 这是我的视图代码
$(function() {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('Meta[name="csrf-token"]').attr('content')
}
});
var table = $('.data-table').DataTable({
paging: true,info: true,autoWidth: false,responsive: true,processing: true,serverSide: true,ajax: {
url: "{{ route('my.task') }}",data: function(d) {
d.kpi = $('#filter-kpi').val(),d.search = $('input[type="search"]').val()
}
},columns: [{
data: 'DT_RowIndex',name: 'DT_RowIndex',orderable: false,searchable: false,},{
data: 'title',name: 'title',{
data: 'content',name: 'content',visible: false,{
data: 'progress',name: 'progress'
},{
data: 'status',name: 'status'
},{
data: 'kpi',name: 'kpi'
},{
data: 'target_selesai',name: 'target_selesai'
},{
data: 'action',name: 'action',searchable: false
},]
});
$('#createNewProduct').click(function() {
...
});
$('body').on('click','.editProduct',function() {
...
});
$('body').on('click','.detailProduct',function() {
...
});
$('#saveBtn').click(function(e) {
...
});
$('body').on('click','.deleteProduct',function() {
...
});
} else {
return false;
}
});
$('#filter-kpi').change(function() {
table.draw();
});
});
这是我的控制器
public function MyTask(Request $request)
{
// if (Auth::user()->jabatan != "Staff") {
// abort(403);
// }
if ($request->ajax()) {
//$data = Post::where('user_id',Auth::user()->uid)->latest()->get();
$data = Post::select('*');
return Datatables::of($data)
->addindexColumn()
->addColumn('action',function ($row) {
...
})->addColumn('target_selesai',function ($row) {
})->addColumn('kpi',function ($row) {
...
})
->addColumn('progress',function ($row) {
...
}
})->addColumn('status',function ($row) {
...
})->filter(function ($instance) use ($request) {
if ($request->get('kpi') == '0' || $request->get('kpi') == '1') {
$instance->where('kpi',$request->get('kpi'));
}
if (!empty($request->get('search'))) {
$instance->where(function ($w) use ($request) {
$search = $request->get('search');
$w->orWhere('title','LIKE',"%$search%")
->orWhere('content',"%$search%");
});
}
})
->rawColumns(['action','progress','status'])
->make(true);
}
return view('task.mytask');
}
我的下拉过滤器
<div class="form-group">
<label><strong>KPI :</strong></label>
<select id='filter-kpi' class="form-control" style="width: 200px" data-column="5">
<option value="">Semua</option>
<option value="1">KPI</option>
<option value="0">Non-KPI</option>
</select>
</div>
当我使用 $data = Post::select('*');
时,程序按预期运行良好。但是,我想把它改成 $data = Post::where('user_id',Auth::user()->uid)->latest()->get();
但是如果我使用下拉过滤器它会弹出警告说“Method Yajra\DataTables\CollectionDataTable::where does not exist”
我的代码有问题吗?提前致谢
解决方法
删除对 get()
的调用,以便您:
$data = Post::where('user_id',Auth::user()->uid)->latest();
这将返回 Eloquent 查询 Builder 实例而不是 Collection 实例。
Datatables 需要在后续方法链中使用构建器实例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。