如何在Laravel中的Yajra数据表查询集合中添加或编辑具有Closure的列失败?

时间:2018-04-23 01:40:40

标签: laravel datatables query-builder laravel-eloquent yajra-datatable

https://yajrabox.com/docs/laravel-datatables/master/edit-column示例说明

$model = App\User::query();
return DataTables::eloquent($model)
    ->addColumn('intro', function(User $user) {
        return 'Hi ' . $user->name . '!';
    })
    ->toJson();

我不知道谁是用户?是用户作为$ User?用户是每行吗?

所以我试试

$search_alls=
    DB::table('a16')
        ->select('*')
        ->where('name','=','john')
        ->get();

return DataTables::collection($search_alls)
    ->addColumn('newclass', function(User $user) {
        return 'Hi ' . $user->id . '!';
    })
    ->toJson();

我遇到了常见错误

  

DataTables警告:table id = users-table - Ajax错误。有关此错误的详细信息,请参阅http://datatables.net/tn/7

如何在添加或编辑列时使用闭包? 我想使用if条件添加一个列值来显示图标。

以下是编辑示例我仍然不知道如何使用,因为我不知道哪个是使用或$ user?有人能为我解释一下吗?感谢〜

use DataTables;

Route::get('user-data', function() {
    $model = App\User::query();

    return DataTables::eloquent($model)
        ->editColumn('name', function(User $user) {
            return 'Hi ' . $user->name . '!';
        })
        ->toJson();
});

2 个答案:

答案 0 :(得分:0)

尝试一下:

$data = App\User::select('*')
                ->where('name','=','john');

return DataTables::collection($data)
                 ->addColumn('newclass', function($data) {
                      return 'Hi ' . $data->name . '!';
                 })
                 ->toJson();

此外,如果要尝试显示HTML内容,则需要将创建的列的名称(在这种情况下为“ newclass”)添加到datatables配置文件的“原始”参数中。让我知道是否有帮助!

答案 1 :(得分:0)

你明白escapeColumns([])的作用吗?

在我看来,它通过设置 NO 列来应用 HTML 转义来禁用所有 HTML 转义。这可能是解决一个问题的一种简单方法,然后在其他情况下导致您陷入危险境地。

在 addColumn 之后附加 escapeColumns([])

->addColumn(){...}
->escapeColumns([])