laravel 在创建资源集合之前过滤模型

6yoyoihd  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在寻找一种方法,使我的 ProductResource 收藏只包括具有有效价格的产品。
在我的routes/api.php中,我使用了一个 * 集合 *,如下所示:

Route::get('/product', function (Request $request) {
  return new ProductCollection(
    Product::all()
  );
});

在模型App\Models\Product中,价格存在关系

public function prices () {
  return $this->hasMany(ProductsPrice::class);
}

App\Models\ProductsPrice中有一个scopeIsActive,我想在创建集合之前调用它。

public function scopeIsActive($query)
{
  return $query->where('is_active', true);
}

有没有一种方法可以调用这个 isActive 作用域,而不创建 Controller,只是查询具有活动价格的产品,并将其放在routes/api.phpResourceCollection 中,就像这样?

Route::get('/product', function (Request $request) {
  return new ProductCollection(
    Product::all()->prices()->isActive()
  );
});
00jrzges

00jrzges1#

你可以这样做。

Route::get('/product', function (Request $request) {
  return new ProductCollection(
    Product::with(['prices' => function($query) {
        $query->isActive();
    }])->get()
  );
});

相关问题