首页 > 解决方案 > 自定义 laravel 集合丢失分页元数据

问题描述

我为我的模型创建了一个自定义集合,以便为我的集合中的每个项目应用一个函数。

我的控制器对数据进行分页,但似乎自定义集合丢失了所有分页元数据:

class Product extends Model
{

    /**
     * Create a new Eloquent Collection instance.
     *
     * @param array $models
     *
     * @return \Illuminate\Database\Eloquent\Collection
     */
    public function newCollection(array $models = [])
    {
        return new ProductCollection($models);
    }
}

class ProductCollection extends Collection
{
    public function applyPrice()
    {
        $productIds = $this->pluck('id')->toArray();

        $stockPrice = ...

        return $this->transform(function (Product $product) use ($productsStockPrice) {
            if (array_key_exists($product->id, $$stockPrice)) {
                $product->price = $productsStockPrice[$product->id]['price'] ?? null;
            }

            return $product;
        });
    }
}

public function index()
    {
        $user = auth()->user();

        $products = Product::orderBy("name")
            ->paginate()
            ->applyPrice($healthcenter);

        return HealthcenterProductResource::collection($products);
    }

结果 :

{
  "data": [...]
}

有没有可能避免这个问题?

标签: phplaravel

解决方案


试试这样:

toQuery()允许通过管道生成分页paginate

$products = Product::orderBy("name")
            ->applyPrice($healthcenter)->get()->toQuery()->paginate();

推荐阅读