Eager Loading Relationships(THIS WILL WORK JUST UNDERSTAND THIS)
DataTables support searching and sorting of eager loaded relationships when using Eloquent. this example will show you how to setup a eager loading search using Eloquent Engine.
To enable search, we need to eager load the relationship we intend to use using Laravel's User::with('posts') api.
use DataTables;
Route::get('user-data', function() {
$model = App\User::with('posts');
return DataTables::eloquent($model)
->addColumn('posts', function (User $user) {
return $user->posts->map(function($post) {
return str_limit($post->title, 30, '...');
})->implode('<br>');
})
->toJson();
});
To trigger search on posts relationship, we need to specify the relation.column_name as the name attribute in our javascript appropriately.
<script>
$(document).ready(function() {
$('#users-table').DataTable({
processing: true,
serverSide: true,
ajax: '{{ url("collection/basic-object-data") }}',
columns: [
{data: 'id', name: 'id'},
{data: 'name', name: 'name'},
{data: 'email', name: 'email'},
{data: 'posts', name: 'posts.title'},
{data: 'created_at', name: 'created_at'},
{data: 'updated_at', name: 'updated_at'}
]
});
});
</script>
Looking at {data: 'posts', name: 'posts.title'},:
data: posts represents the data key (data.posts) that we are going to display on our table.
name: posts.title represents the User model relationship (posts) and the column we are going to perform our search (title).