![](/img/trans.png)
[英]Is there an easier way to filter columns in a Laravel Resource Collection?
[英]Filter attributes in Laravel Resource Collection
在新的Laravel Resource類中,您可以根據自己喜歡的任何內容刪除屬性。
如果要返回許多項目,可以使用該功能
Resource::collection()
但這不允許您在一個地方添加元數據。 輸入一個集合,很棒,這是一個很好的格式的項目,能夠添加元數據。 但你不能做的是過濾你必須隱藏屬性的集合,就像你可以用資源一樣。 我能看到的唯一方法是
foreach ($this->collection as $item) {
if ($notAdmin) {
$temp = array_except($item->toArray(), ['secret']);
}
$temp['links'] = ['self' => route('restaurant.show', [$item])];
$data[] = $temp;
}
有什么我想念的嗎? 這似乎是資源收集的一個巨大的被忽視的能力
基於此線程,似乎在使用ResourceCollection類來自定義集合時(例如BookCollection
),Laravel會查找名為相同但沒有Collection sufix類的Resource類(在示例中,名為Just Book
的類)。
因此,您需要有一個名為的Book
: Book
,您可以自定義要返回到響應的屬性,以及一個名為BookCollection
的集合類,它將使用Book
定義數據,並且還可以自定義元數據。
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
class Book extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
];
}
}
<?php
namespace App\Http\Resources\Users;
use Illuminate\Http\Resources\Json\ResourceCollection;
class BookCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return $this->collection;
}
public function with($request)
{
return [
'meta' => [
'key' => 'value',
],
];
}
}
好的,這是你如何做到的:
創建Resource
對於單個資源,在這里你可以輕松擁有條件屬性
為集合創建RCollection
,您可以在其中添加元數據 。
將Resource::collection(Model::all)
傳遞給new RCollection()
。
像這樣的東西(來自我的測試):
Route::get('users/all', function() {
return new \App\Http\Resources\Users(
\App\Http\Resources\UserResource::collection(\App\User::get())
);
});
奇跡般有效!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.