簡體   English   中英

在創建資源集合之前過濾一個 model

[英]Filter a model before you create an resource Collection

我正在尋找一種方法,使我的ProductResource Collection 僅包含具有有效價格的產品。

在我的routes/api.php中,我這樣使用Collection

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

在 model 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 scope 而無需創建Controller來查詢具有有效價格的產品並將其放入routes/api.phpResourceCollection中,就像這樣?

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

你可以這樣做。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM