eadortsu / 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 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 . '">×</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(); } }