【发布时间】:2021-05-02 09:00:40
【问题描述】:
您好,我在为用户获取数据时使用 DataTables。但是用户有大量记录,加载需要时间。我想从database 中获取data,以便仅在数据库中获取10 records。所以场景是当你去users view时它只会在数据库中得到10 records,然后当你在数据库中单击下一步时加载另一个10 records。
UserController.php
// Show Users
public function index()
{
return view('user-list');
}
// Get Users Using Datatables
public function getData()
{
$users = User::all()->get();
return Datatables::of($users)
// EditColumn User ID
->editColumn('user_id', function ($user) {
return '<span class="text-red">$user->user_id</span>';
})
->addColumn('btn_login', function ($user) {
return $user->is_active . '<a class="btn btn-default" type="button" href="#">Sample</a>';
})
->rawColumns(['btn_login'])
->make(true);
}
web.php
Route::get('userlist', 'UserController@index')->name('user.list');
// Get Users Via DataTables
Route::get('/api/userlist', 'UsersController@getData')->name('api.user.list');
user-list.blade.php
<div class="box">
<div class="box-header"></div>
<div class="box-body">
<div class="table-responsive">
<table id="users-table" class="table table-hover table-condensed table-striped">
<thead>
<tr>
<th>User ID</th>
<th>User Name</th>
<th>Email</th>
<th>Phone Number</th>
<th>Login</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
<div class="box-footer"></div>
</div>
<script>
$('#users-table').DataTable({
processing: true,
responsive: true,
serverSide: true,
stateSave: true,
order: [ [0, "desc"] ],
ajax: '{{ route("api.user.list") }}',
columns: [
{data: 'user_id'},
{data: 'name'},
{data: 'email'},
{
data: 'phone_number',
defaultContent: "---"
},
{data: 'btn_login'}
]
});
</script>
问题出在这段代码中:
$users = User::all()->get();
因为当我尝试使用dd($users) 时,它会获取用户表中的所有数据。我想要实现的是每个只获取10 records,当您单击下一步时,它将在后端获取另一个10 records。
有什么办法可以操纵这个吗?
不过,我是使用 Laravel 数据表的新手,非常感谢任何人的帮助。
【问题讨论】:
-
查看
pagination文档。 -
@Unflux 是否可以在使用数据表时执行
paginate()?我的 getData() 函数正在使用 ajax 来获取数据,不知何故我的控制台出错了。 -
您遇到了什么错误?
-
你能不能把
$users = User::all()->get();改成$users = User::query();,这样你只把查询传递给dataTable,它会自己限制结果。
标签: php laravel eloquent datatables