我正在使用Laravel Resource作为发送API数据的工具。但是,当我使用CRUD方法制作一个基本控制器时 - 所有方法都不同,例如
public function show(Offer $offer)
{
return $offer;
}
public function index()
{
return Offer::orderBy('created_at','desc')->get();
}
所以我创建了OfferResource,对于show方法,它是:
return new OfferResource($offer);
class OfferResource extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'body' => $this->body,
'title' => $this->title,
'specialities' => $this->specialities()->pluck('speciality_id'),
'specialities_name' => $this->specialities()->pluck('name')
];
}
}
我应该如何为方法索引()调用OfferResource? 我应该创建另一个资源“控制器”吗?或者是否有不同的方法来使用相同的OfferResource?
答案 0 :(得分:1)
您可以使用collection()方法将此资源用于索引 -
return OfferResource::collection(Offer::orderBy('created_at','desc')->get());
如果您可以使用而不是为multiple purpose
创建new
,则最好使用each purpose
资源。
我们都知道代码re-use
的概念,OOP
的基本基础,我们想写ones
但是使用multiple
次。这就是我们在需要Resource
我们的数据以预定义格式将数据发送到数组时编写transform
类的原因。并且要求总是change
,因此使用resource
来跟上变化会更好。
resource
类代表single
模型,需要transformed
成为JSON
结构。
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
Laravel也provide
使用此方法使用collection of resources
方法转换collection()
的方法。