[英]Laravel eager load resource collection
如何預先加載資源集合關系? 我制作了一個資源,它稱為gravel_pits
關系
class GravelTypeResource extends Resource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'deleted_at' => $this->deleted_at,
'gravel_pits' => $this->gravel_pits,
];
}
}
在模型 M:M 關系上:
public function gravel_pits()
{
return $this->belongsToMany('App\GravelPit');
}
從 API 我得到它是這樣的:
public function index()
{
return GravelTypeResource::collection(GravelType::all());
}
我可以通過這樣做來急切地加載它
public function index()
{
return GravelTypeResource::collection(GravelType::with('gravel_pits'));
}
哪個有效……但我無法控制我真正想要返回的礫石坑的哪些屬性,相反,急切加載將它們全部取出。 有一個簡單的解決方法嗎?
您可以傳入一個選擇來獲取您想要的字段。 只需確保您獲得關系所基於的字段:
return GravelTypeResource::collection(GravelType::with('gravel_pits'=>function($query) {
$query->select(['id', 'gravel_type_id', 'column3', 'column4']);
});
您可以使用資源集合
GravelTypeResourceCollection::make($collection);
並且由於您可以在 eloquent 集合上使用load和loadMissing ,因此您可以執行此操作
class GravelTypeResourceCollection extends ResourceCollection
{
$collects = GravelTypeResource::class;
public function __construct($resource){
$resource->loadMissing(['gravel_pits']);
parent::__construct($resource);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.