我專案上使用API Resource實做某一個資料的回傳, 最近分別實現show 和 index 的回傳
首先, 在show 部分的resource 我是這樣寫的
public function toArray($request)
{
$this->giftCustomer->message = $this->giftMessages->gift_customer_message;
$this->receiveCustomer->message = $this->giftMessages->receive_customer_message;
return [
.... (以上略)
"gift" => new Customer($this->giftCustomer),
"receive" => new Customer($this->receiveCustomer),
];
}
而index 顯示列表時我得這樣
public function toArray($request)
{
return [
.... (以上略)
"gift" => collect(new Customer($this->giftCustomer))->merge(['message'=>$this->giftMessages->gift_customer_message]),
"receive" =>collect(new Customer($this->receiveCustomer))->merge(['message'=> $this->giftMessages->receive_customer_message])),
];
兩者其實customer 的部分都是一樣的
public function toArray($request)
{
return [
"id" => $this->id,
"account" => $this->account,
"nickname" => $this->nickname,
"message" => $this->message
];
}
其實我蠻喜歡上面show 部分的寫法,比較簡潔比較好看
但是index 我試過了卻無法正確顯示我要的message,
反而要在外層使用collect()->merge() 才能顯示我要的message
難道 Resouce::collection 和 new Resource() 有一些不一樣
所以才讓我在index 的部分沒辦法按照show 的寫法?
那麼, 我index的部分應該怎麼樣寫會比較好看?
也不知道怎麼打關鍵字,如果有建議的關鍵字可以丟給我好讓我去查看看
難道 Resouce::collection 和 new Resource() 有一些不一樣
前者是多個物件集合,後者是單一物件
https://blog.johnsonlu.org/laravel-eloquent-api-resources/
Collection
接下來問題來了,很多時候我們會取得資源的清單,比如說 SongModel::all(),直接使用 Resource 會出現錯誤訊息,因為丟進去的是一個 Collection ,並不是物件本身。
此時需要搭配 Resource::collection() 使用,它會將 Collection 中的所有 Model 物件自動套用 Resource 的格式。