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
Try adding data-order attribute in row as below
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" data-order = '.abs($row->overall_returns_count) ?? '0'.' title="Total Returns">'.(abs($row->overall_returns_count) ?? 'N/A').'</span> </a>';
}