schoppax/eloquent-datatable

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

1.0.5 2024-07-26 21:50 UTC

This package is auto-updated.

Last update: 2024-09-26 22:09:38 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();
  }
}