LaravelPackages.net
Acme Inc.
Toggle sidebar
livecontrol/eloquent-datatable

Eloquent DataTable plugin for server side ajax call handling.

275.692
55
0.1.5
About livecontrol/eloquent-datatable

livecontrol/eloquent-datatable is a Laravel package for eloquent datatable plugin for server side ajax call handling.. It currently has 55 GitHub stars and 275.692 downloads on Packagist (latest version 0.1.5). Install it with composer require livecontrol/eloquent-datatable. Discover more Laravel packages by livecontrol or browse all Laravel packages to compare alternatives.

Last updated

EloquentDataTable Build status

Eloquent compatible DataTable plugin for server side ajax call handling.

If you are familiar with eloquent and would like to use it in combination with datatables this is what you are looking for.

Usage

Step 1: Install through composer

composer require livecontrol/eloquent-datatable

Step 2: Add DataTables javascript and set it up

For more information check out the datatables manual. Make sure you have csrf requests working with jquery ajax calls.

var table = $('#example').DataTable({
  "processing": true,
  "serverSide": true,
  "ajax": {
    "url": "<url to datatable route>",
    "type": "POST"
  }
});

Step 3: Use it

$users = new Models\User();
$dataTable = new LiveControl\EloquentDataTable\DataTable($users, ['email', 'firstname', 'lastname']);
echo json_encode($dataTable->make());

Optional step 4: Set versions of DataTables plugin.

Just initialize the DataTable object as you would normally and call the setVersionTransformer function as in the following example (for version 1.09 of DataTables):

$dataTable->setVersionTransformer(new LiveControl\EloquentDataTable\VersionTransformers\Version109Transformer());

By default the plugin will be loading the transformer which is compatible with DataTables version 1.10.

Examples

Basic example

use LiveControl\EloquentDataTable\DataTable;

class UserController {
  ...
  public function datatable()
  {
    $users = new User();
    $dataTable = new DataTable(
      $users->where('city', '=', 'London'),
      ['email', 'firstname', 'lastname']
    );
    
    return $dataTable->make();
  }
}

In this case we are making a datatable response with all users who live in London.

Combining columns

If you want to combine the firstname and lastname into one column, you can wrap them into an array.

use LiveControl\EloquentDataTable\DataTable;

class UserController {
  ...
  public function datatable()
  {
    $users = new User();
    $dataTable = new DataTable(
      $users,
      ['email', ['firstname', 'lastname'], 'city']
    );
    
    return $dataTable->make();
  }
}

Using raw column queries

Sometimes you want to use custom sql statements on a column to get specific results, this can be achieved using the ExpressionWithName class.

use LiveControl\EloquentDataTable\DataTable;
use LiveControl\EloquentDataTable\ExpressionWithName;

class UserController {
  ...
  public function datatable()
  {
    $users = new User();
    $dataTable = new DataTable(
      $users,
      [
        'email',
        new ExpressionWithName('`id` + 1000', 'idPlus1000'),
        'city'
      ]
    );
    
    return $dataTable->make();
  }
}

Return custom row format

If you would like to return a custom row format you can do this by adding an anonymous function as an extra argument to the make method.

use LiveControl\EloquentDataTable\DataTable;

class UserController {
  ...
  public function datatable()
  {
    $users = new User();
    $dataTable = new DataTable($users, ['id', ['firstname', 'lastname'], 'email', 'city']);
    
    $dataTable->setFormatRowFunction(function ($user) {
      return [
        $user->id,
        '<a href="/users/' . $user->id . '">' . $user->firstnameLastname . '</a>',
        '<a href="mailto:' . $user->email . '">' . $user->email . '</a>',
        $user->city,
        '<a href="/users/delete/' . $user->id . '">&times;</a>'
      ];
    });
    
    return $dataTable->make();
  }
}

Showing results with relations

use LiveControl\EloquentDataTable\DataTable;

class UserController {
  ...
  public function datatable()
  {
    $users = new User();
    $dataTable = new DataTable(
    	$users->with('country'),
    	['name', 'country_id', 'email', 'id']
    );
    
    $dataTable->setFormatRowFunction(function ($user) {
    	return [
    		'<a href="/users/'.$user->id.'">'.$user->name.'</a>',
    		$user->country->name,
    		'<a href="mailto:'.$user->email.'">'.$user->email.'</a>',
    		'<a href="/users/delete/'.$user->id.'">&times;</a>'
    	];
    });
    
    return $dataTable->make();
  }
}
Comments