livecontrol / eloquent-datatable
Eloquent DataTable 插件,用于处理服务器端 AJAX 调用。
0.1.5
2015-09-15 11:39 UTC
Requires
- php: >=5.4.0
- illuminate/database: 5.*
Requires (Dev)
- phpspec/phpspec: ~2.1
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 . '">×</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.'">×</a>' ]; }); return $dataTable->make(); } }