簡體   English   中英

Laravel 急切加載資源收集

[英]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 集合上使用loadloadMissing ,因此您可以執行此操作

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM