Return html content via Ajax Laravel DataTable (using yajrabox package)
Okay, the issue appears to be a undocumented breaking change in the new 7.x version of the library: https://github.com/yajra/laravel-datatables/issues/949
In my case, I've fixed it like this:
function ajaxList(){ // Load users with users $users = User::with('group', 'organisation'); // Finished return Datatables::eloquent($users) ->editColumn('is_admin', function(User $user) { return '<i class="fa fa-'. ($user->is_admin ? 'check' : 'times') .'" aria-hidden="true"></i>'; }) ->rawColumns(['is_admin']) ->make(true);}
Just put your column in blow metho
escapeColumns()
Example
return $dataTable->addIndexColumn() ->editColumn('active', function(SettingDropdownValue $model) { if($model->active === true){ return '<span class="text-center"><img src="'.\URL::asset('/images/active.png').'" border="0" width="15" /></span>'; } else { return '<img src="'.\URL::asset('/images/inactive.png').'" border="0" width="15" />'; } }) ->escapeColumns('active') ->addColumn('action', 'setting_dropdown_values.datatables_actions');
I'm working on a project right now and face the same problem and fix it using ->escapeColumns([])
$users = DB::table('users')->select('*'); return datatables()->of($users) ->removeColumn('password') ->editColumn('created_at', function ($user) { return date('d-m-Y', strtotime($user->created_at)); }) ->editColumn('role_id', function ($user) { return Role::findOrFail( $user->role_id)->name; }) ->editColumn('is_active', function ($user) { return ($user->is_active == 1) ? 'active' : 'suspended'; }) ->addColumn('actions', function ($user) { return '<a href="#edit-'.$user->id.'" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Edit</a>'; }) ->escapeColumns([]) ->make(true);
Source: yajra/laravel-datatables