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

时间:2019-09-04 09:52:53

标签: php laravel eloquent laravel-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上的当前字段,但是此代码给了我以下错误:

  

“消息”:“此集合实例上不存在属性[id]。”,

2 个答案:

答案 0 :(得分:2)

如果您要返回收藏集,则应为:

return FilterResource::collection($data);

答案 1 :(得分:2)

在Laravel雄辩的get()函数中返回一个集合。

解决方案

  1. 如果要以数组形式返回所有住宿,则需要在资源上调用collection()
return FilterResource::collection($data);
  1. 如果要获取一个Accommodation,则需要在口才查询中调用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);