I'm using Yajra datatables with serverside true, but page load very slow (afraid because of distinct count). I tried solution here by removing ->get() and it load faster but this causing another problem, where the input searching (smart: true) return error, not functioning. Anyone can help?
Here is my code:
$links = Link::with('owner')
->withCount(['clicks as uniqueClicks' => function($q) {
$q->select(DB::raw('count(distinct(ip_address))'));
}])
->where('account_id', $account_id)
->orderBy('created_at','desc')
->get();
return Datatables::of($links)->make();
Is it possible to optimize this code? maybe change from select raw distinct to groupBy? or do this more on eloquent way?
CodePudding user response:
My mistake for not stating the full errors and in the error mentioned about laravel relationship column not found.
Here is the documentation https://yajrabox.com/docs/laravel-datatables/master/relationships
columns: [
// columns according to JSON
{ data: '' },
{ data: 'title' },
{ data: 'user_name', name: 'user.manage.name' }, <-- name = relationship column
{ data: 'link' },
{ data: 'created_at', "searchable": false },
{ data: 'action' }
],
So removing the ->get() do make your page load faster.
$links = Link::with('owner')
->withCount(['clicks as uniqueClicks' => function($q) {
$q->select(DB::raw('count(distinct(ip_address))'));
}])
->where('account_id', $account_id)
->orderBy('created_at','desc');
return Datatables::of($links)->make();