livecontrol/eloquent-datatable

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

0.1.5 2015-09-15 11:39 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:33:15 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();
  }
}