1

我有一个变量是分页对象

$pagination

我正在使用变换改变它里面的东西

$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);
    }
}

来自这个问题。

获取后如何取消设置(删除)集合元素?

我猜我正在处理分页的事实可能使这些答案不适用于我的情况。

4

1 回答 1

4

单独收集分页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()
    ]
  ]
);
于 2019-02-25T20:50:48.137 回答