How do I sort according to the second data? The sorting works only on the ID. But in my table, I added a badge count and that's what I want to sort by.
Here is my controller
return DataTables::of($users)
->addIndexColumn()
->addColumn('Inventories', function ($row) {
if($row->status != 'Dumped2') {
return '<a href="'.route('admin.clients.show-client-inventories2', $row->id).'" class="btn btn-info btn-sm">'.__("Inventories").' <span class="right badge badge-success" title="Total Lost">'.(abs($row->inv_total_lost_qty) ?? 'N/A').'</span> </a>';
}
})
->addColumn('Returns', function ($row) {
if($row->status != 'Dumped2') {
return ' <a href="'.route('admin.clients.show-client-returns', $row->id) .'" class="btn btn-info btn-sm">'.__('Returns').' <span class="right badge badge-warning" title="Total Returns">'.(abs($row->overall_returns_count) ?? 'N/A').'</span> </a>';
}
$row->status->orderBy(abs($row->overall_returns_count));
})
->addColumn('inbound_shipments', function ($row) {
if($row->status != 'Dumped2') {
return '<a href="'. route('admin.clients.show-client-inbound-shipments', $row->id).'" class="btn btn-info btn-sm">'. __('Inbound Shipments').'<span class="right badge badge-danger" title="Total Overcharged Fees">'. abs($row->shipment_quantity_diff).'</span> </a>';
}
})
->addColumn('overcharged', function ($row) {
if($row->status != 'Dumped2') {
return '<a href="'. route('admin.clients.show-client-overcharged-fee', $row->id).'" class="btn btn-info btn-sm">'.__('Overcharged Fee') .' <span class="right badge badge-primary" title="Total Overcharged Fees">'.(abs($row->overall_overcharged_fees_count) ?? 'N/A').'</span> </a>';
}
})
->addColumn('ALL', function ($row) {
if($row->status != 'Dumped2') {
$arr = array(abs($row->overall_overcharged_fees_count), abs($row->overall_returns_count), abs($row->inv_total_lost_qty),abs($row->shipment_quantity_diff));
return array_sum($arr);
}
})
->addColumn('credentials', function ($row) {
if($row->status != 'Dumped2') {
return '<button onclick="set_credentials(this)" class="btn btn-danger btn-sm"> '.__("Set Credentials").'</button>';
}
})
->addColumn('reim', function ($row) {
if($row->status != 'Dumped2') {
return '<a href="'. route('admin.clients.show-client-reimbursements', $row->id).'" class="btn btn-danger btn-sm">'.__('Reimbursements') .'</a>';
}
})
->rawColumns(['Inventories','action','Returns','inbound_shipments','overcharged','ALL','credentials','reim'])
->make(true);
}
return view('admin.clients.index', compact('users'));
The column I want to sort is not $row->id, what I want is the second one like abs($row->overall_returns_count).
And in my Blade code. I wrote something like this:
//Update start
{width: "10%", data: 'ALL', name: 'ALL', orderable: true, searchable: false},
{width: "10%", data: 'Inventories', name: 'Inventories', orderable: true, searchable: false},
{width: "10%", data: 'Returns', name: 'Returns', orderable: true, searchable: false},
{width: "15%", data: 'inbound_shipments', name: 'Inbound Shipments', orderable: true, searchable: false},
{width: "10%", data: 'overcharged', name: 'Overchared Fee', orderable: true, searchable: false},
As you can see, if I click the header, it doesn't sort the badge. Instead, it sorts the id as you can see in the lower left corner when I hovered the button. (id starting in 2)
System details Operating System Windows 10
PHP Version 7.2
Laravel Version 6.0
Laravel-Datatables Version ^9.6

$usersis a query builder or a collection?Added columns are assumed to be computed columns and not part of the database. Thus, search/sort will be disabled on those columns. If you need them, use the editColumn api instead.It might be easier if you use the official documentation' example of sorting by multiple columns.