laravel - 方法 Yajra\DataTables\CollectionDataTable::where 不存在

标签 laravel datatable datatables laravel-8 yajra-datatable

我在 Laravel 项目中有一个数据表。我创建了一个下拉过滤器来过滤 KPI 列。
这是我的 View 代码

$(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',
                        orderable: false,
                    },
                    {
                        data: 'content',
                        name: 'content',
                        orderable: false,
                        visible: false,
                    },
                    {
                        data: 'progress',
                        name: 'progress'
                    },
                    {
                        data: 'status',
                        name: 'status'
                    },
                    {
                        data: 'kpi',
                        name: 'kpi'
                    },
                    {
                        data: 'target_selesai',
                        name: 'target_selesai'
                    },
                    {
                        data: 'action',
                        name: 'action',
                        orderable: false,
                        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();
            });
        });
这是我的 Controller
 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', 'LIKE', "%$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 需要在后续方法链中使用 builder 实例。

关于laravel - 方法 Yajra\DataTables\CollectionDataTable::where 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66362522/

相关文章:

php - 写入 csv 文件。 ' ; ' 下一列不起作用

angular - 如何修复登录请求的 401(未经授权)

javascript - 数据表ajax从新来源重新加载

javascript - 如何在 Javascript 源数据中使用(添加)行创建回调

Jquery 数据表隐藏列在调用另一个脚本后显示。如何永久隐藏指定的列?

php - 执行 Laravel Envoy 任务时如何访问 bash 中声明的变量?

javascript - VueJS 和 Laravel,当用户离开屏幕时执行发布请求

c# - 对 DataTable 进行排序不起作用

javascript - CSS JQuery 数据表 - 奇怪的渲染

javascript - 数据表大小变化