我的Laravel分页输出就像以前的laravel分页一样,但我需要为每个对象更改数据数组.我的输出是:
如您所见,数据对象有2个项目,我需要更改.
我的代码是:
$items = $this->items()
->where('position', '=', null)
->paginate(15);
Run Code Online (Sandbox Code Playgroud)
这返回带有数据透视表的用户项,但我不喜欢数据透视表在JSON中显示的方式,因此我决定更改项目并使用项目前的数据透视来组织每个项目.
为此,我试图使用 foreach
foreach ($items->data as $item)
{
}
Run Code Online (Sandbox Code Playgroud)
由于我不知道的原因,我给出了一个错误:
Undefined property: Illuminate\Pagination\LengthAwarePaginator::$data"
status_code: 500
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
Mur*_*rwa 63
paginator的项目是一个集合.你可以抓住它并转换数据,如下所示:
$paginator = $this->items()->where('position', '=', null)->paginate(15);
$paginator->getCollection()->transform(function ($value) {
// Your code here
return $value;
});
Run Code Online (Sandbox Code Playgroud)
Sco*_*eld 25
有一种setCollection方法可以达到这种目的。
$items = Model::paginate(10);
$updatedItems = $items->getCollection();
// data manipulation
// ...
$items->setCollection($updateItems);
Run Code Online (Sandbox Code Playgroud)
从源代码 /Illuminate/Pagination/AbstractPaginator.php
/**
* Set the paginator's underlying collection.
*
* @param \Illuminate\Support\Collection $collection
* @return $this
*/
public function setCollection(Collection $collection)
{
$this->items = $collection;
return $this;
}
Run Code Online (Sandbox Code Playgroud)
小智 16
如果您想保留分页的项目:
$itemsPaginated = $this->items()
->paginate(15);
$itemsTransformed = $itemsPaginated
->getCollection()
->map(function($item) {
return [
'id' => $item->id,
];
})->toArray();
$itemsTransformedAndPaginated = new \Illuminate\Pagination\LengthAwarePaginator(
$itemsTransformed,
$itemsPaginated->total(),
$itemsPaginated->perPage(),
$itemsPaginated->currentPage(), [
'path' => \Request::url(),
'query' => [
'page' => $itemsPaginated->currentPage()
]
]
);
Run Code Online (Sandbox Code Playgroud)
小智 7
如果您想更改或更新 Laravel 分页输出但不影响分页,那么您应该遵循这些说明。
$items = Model::paginate(10);
$updatedItems = $items->getCollection();
// data manipulation
// ...
$items->setCollection($updateItems);
Run Code Online (Sandbox Code Playgroud)
你可以从这里检查这个
Laravel 8.9.0 已将该方法添加through到AbstractPaginator.
它使用回调转换项目切片中的每个项目,并保持项目分页。
$paginator = $this->items()->where('position', '=', null)->paginate(15);
$paginator->through(function ($value) {
// Your code here
return $value;
});
Run Code Online (Sandbox Code Playgroud)
源代码:
/**
* Transform each item in the slice of items using a callback.
*
* @param callable $callback
* @return $this
*/
public function through(callable $callback)
{
$this->items->transform($callback);
return $this;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17871 次 |
| 最近记录: |