我有一个作为分页对象的变量
$pagination
我正在使用transform更改其中的内容
$pagination->getCollection()->transform(function ($item, $key) use(&$data, &$pagination) {
$item->foo = 'bar';
}
我想从分页中删除符合特定条件的项目。在可以使用数据之前,我不希望将其删除。以下是一个示例。
$pagination->getCollection()->transform(function ($item, $key) use(&$data, &$pagination) {
$data[] = $item->foo;
if ($item->foo === 'bar') {
$item->remove();
}
}
我还尝试在转换中使用$pagination->getCollection()->forget($key);
$pagination->getCollection()->transform(function ($item, $key) use(&$data, &$pagination) {
$data[] = $item->foo;
if ($item->foo === 'bar') {
$pagination->getCollection()->forget($key);
}
}
这是这个问题。
How to unset (remove) a collection element after fetching it?
我猜我正在处理分页的事实可能会使这些答案不适用于我的情况。
答案 0 :(得分:2)
使用filter()
进行分页收集可以根据复杂条件从分页中删除项目。我在转换中返回false,然后将其定位到过滤器中。
$pagination = $pagination->getCollection()->filter(function ($item) {
return $item;
});
编辑:这实际上删除了分页属性,因此之后我像这样重新创建了分页
// Remove already merged rows
$itemsTransformed = $pagination->getCollection()->filter(function ($item) {
return $item;
});
// Recreate because filter removed pagination properties
$itemsTransformedAndPaginated = new \Illuminate\Pagination\LengthAwarePaginator(
$itemsTransformed,
$pagination->total(),
$pagination->perPage(),
$pagination->currentPage(), [
'path' => \Request::url(),
'query' => [
'page' => $pagination->currentPage()
]
]
);