如何使用集合中的资源自定义 api

How to customize api with resource on collection

我的控制器上有一个集合,如下所示:

 $data = Accommodation::with(['city','accommodationRoomsLimited.roomPricingHistorySearch' => function($query) use($from_date,$to_date){
    $query->whereDate('from_date', '<=', $from_date);
    $query->whereDate('to_date', '>=', $to_date);
    }])    
    ->get();
 return new FilterResource($data);

这是我的过滤器资源

  public function toArray($request)
    {
    //return parent::toArray($request);
        return [
            'id'           => $this->id,
            'costumfields' => 'somecostumfields'
        ];
    }

现在我想自定义我的资源,以便我可以向其中添加一些自定义字段并自定义 api 上的当前字段,但是这段代码给出了以下错误:

"message": "Property [id] does not exist on this collection instance.",

如果您要归还一个集合,它应该是:

return FilterResource::collection($data);

在 Laravel Eloquent get() 函数中 return 是一个集合。

灵魂

  1. 如果你想return所有的住宿作为一个数组,你需要在资源上调用collection()
return FilterResource::collection($data);
  1. 如果您想获得一个 Accommodation,您需要在 Eloquent 查询中调用 first()
$accommodation = Accommodation::with([
    'city',
    'accommodationRoomsLimited.roomPricingHistorySearch' => function($query) use($from_date,$to_date) {
        $query->whereDate('from_date', '<=', $from_date);
        $query->whereDate('to_date', '>=', $to_date);
    }])    
    ->first();

 return new FilterResource($accommodation);