eadortsu/eloquent-datatable

Eloquent DataTable 插件,用于处理服务器端 AJAX 调用。

0.1.5 2015-09-15 11:39 UTC

This package is auto-updated.

Last update: 2024-09-14 00:45:07 UTC


README

Eloquent 兼容的 DataTable 插件,用于处理服务器端 AJAX 调用。

如果你熟悉 Eloquent,并且想要与 datatables 结合使用,这就是你要找的。

使用方法

步骤 1:通过 composer 安装

composer require livecontrol/eloquent-datatable

步骤 2:添加 DataTables JavaScript 并设置

更多信息请查看 datatables 手册。请确保你有 csrf 请求 与 jQuery AJAX 调用一起工作。

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

步骤 3:使用它

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

可选步骤 4:设置 DataTables 插件的版本。

就像你通常初始化 DataTable 对象一样,并像以下示例中那样调用 setVersionTransformer 函数(对于 DataTables 的 1.09 版本)

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

默认情况下,插件将加载与 DataTables 版本 1.10 兼容的转换器。

示例

基本示例

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();
  }
}

在这种情况下,我们创建一个包含所有居住在伦敦的用户的数据表响应。

合并列

如果你想将姓名和姓氏合并到一个列中,你可以将它们包装到一个数组中。

use LiveControl\EloquentDataTable\DataTable;

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

使用原始列查询

有时你想要在列上使用自定义 SQL 语句来获取特定结果,这可以通过使用 ExpressionWithName 类来实现。

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();
  }
}

返回自定义行格式

如果你想返回一个自定义行格式,你可以在 make 方法的额外参数中添加一个匿名函数。

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();
  }
}

显示具有关系的查询结果

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();
  }
}