I have one User
who can be assigned to many Company
. I'm trying to render a table using Laravel Datatables & jQuery Datatables. It renders nicely and when clicking on the order icon in the table header, it sorts data by that column, except, it doesn't work for the relationship column company_name
.
This is my code in the controller:
$users = User::with(['roles','companies'])
->where('users.id', '!=', Auth::id())
->whereHas('roles', function($q){$q->whereId(Role::ROLE_6);});
...
return Datatables::of($users)
->editColumn('company', function (User $user) {
return $user->hasCompanies()? $user->companies->first()->company_name : trans('lang.company.not_assigned');
})
->orderColumn('company', 'company')
->make(true);
And this is my javascript for datatables:
otable = $('#datatable_fixed').DataTable({
"ajax": {
url: 'users/datatable',
type: 'POST',
},
"pageLength": 15,
"processing": true,
"stateSave": true,
"serverSide": true,
"bDestroy": true,
columns: [
{data: 'first_name', name: 'first_name'},
{data: 'last_name', name: 'last_name'},
{data: 'company', name: 'company.company_name'},
{data: 'email', name: 'email'},
{data: 'status', name: 'status'},
],
dom: 'Bfrtip',
searching: false,
"order": [[0, 'asc']],
"autoWidth": true,
});
->select('expenses.*')
will also create an N+1 problem which will start showing the same data multiple times, also mentioned in this comment, github.com/yajra/laravel-datatables/issues/… – Affix