Laravel 7.0 分页在方法链中不起作用
Laravel 7.0 pagination not working in method chain
这里我在 Laravel Eloquent model (User)
上使用带有分页的方法链接,但是在调用方法 each
后分页停止工作。
这种行为是预期的还是我遗漏了什么。官方文档中提到了这一点。
工作正常
User::paginate(10)
->appends(request()->all());
输出
{
"data": [
{
"id": 1,
"email": "user@email.com",
},
{
"id": 2,
"email": "two@email.com",
},
],
"current_page": 1,
"first_page_url": "//localhost/users?page=1",
"last_page": 5,
"last_page_url": "//localhost/users?page=5",
"next_page_url": "//localhost/users?page=2",
"path": "//localhost/users",
"per_page": 10,
"prev_page_url": null,
"total": 50
}
但是当我打电话时问题来了 each() method on it
不工作
User::paginate(10)
->appends(request()->all())
->each(function ($user) {
$user['someAttribute'] = 'value';
return $user;
})
输出(分页无效)
plain simple result 仅查询记录。 (省略分页信息)
[
{
"id": 1,
"email": "user@email.com",
},
{
"id": 2,
"email": "two@email.com",
},
]
我认为您在更改 $items
后无法检索分页属性。您必须手动将更改后的数据转换为 LengthAwarePaginator
对象。
$users = User::paginate(15);
$alteredUsers = $users->getCollection()
->each(function($user) {
$user['someAttribute'] = 'value';
return $user;
});
$newPaginatedUsers = new \Illuminate\Pagination\LengthAwarePaginator(
$alteredUsers,
$users->total(),
$users->perPage(),
$users->currentPage(),
[
'path' => \Request::URL(), // optional
]
)->appends(request()->all());
您可以查看源代码 here 并更好地了解如何构建对象。
创建访问器:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function getSomeAttributeAttribute()
{
return 'value';
}
}
$users = User::paginate(10)->appends(request()->all());
https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor
https://laravel.com/docs/8.x/eloquent-serialization#appending-values-to-json
这里我在 Laravel Eloquent model (User)
上使用带有分页的方法链接,但是在调用方法 each
后分页停止工作。
这种行为是预期的还是我遗漏了什么。官方文档中提到了这一点。
工作正常
User::paginate(10)
->appends(request()->all());
输出
{
"data": [
{
"id": 1,
"email": "user@email.com",
},
{
"id": 2,
"email": "two@email.com",
},
],
"current_page": 1,
"first_page_url": "//localhost/users?page=1",
"last_page": 5,
"last_page_url": "//localhost/users?page=5",
"next_page_url": "//localhost/users?page=2",
"path": "//localhost/users",
"per_page": 10,
"prev_page_url": null,
"total": 50
}
但是当我打电话时问题来了 each() method on it
不工作
User::paginate(10)
->appends(request()->all())
->each(function ($user) {
$user['someAttribute'] = 'value';
return $user;
})
输出(分页无效)
plain simple result 仅查询记录。 (省略分页信息)
[
{
"id": 1,
"email": "user@email.com",
},
{
"id": 2,
"email": "two@email.com",
},
]
我认为您在更改 $items
后无法检索分页属性。您必须手动将更改后的数据转换为 LengthAwarePaginator
对象。
$users = User::paginate(15);
$alteredUsers = $users->getCollection()
->each(function($user) {
$user['someAttribute'] = 'value';
return $user;
});
$newPaginatedUsers = new \Illuminate\Pagination\LengthAwarePaginator(
$alteredUsers,
$users->total(),
$users->perPage(),
$users->currentPage(),
[
'path' => \Request::URL(), // optional
]
)->appends(request()->all());
您可以查看源代码 here 并更好地了解如何构建对象。
创建访问器:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function getSomeAttributeAttribute()
{
return 'value';
}
}
$users = User::paginate(10)->appends(request()->all());
https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor
https://laravel.com/docs/8.x/eloquent-serialization#appending-values-to-json