如何急切加载资源集合关系?我创建了一个名为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'));
}
哪个有效......但是我无法控制砾石坑的实际特性,相反,急切的负载会将它们全部取出。有一个简单的解决方法吗?
答案 0 :(得分:0)
您可以传入一个选择以获取您想要的字段。只需确保获得关系所依据的字段:
return GravelTypeResource::collection(GravelType::with('gravel_pits'=>function($query) {
$query->select(['id', 'gravel_type_id', 'column3', 'column4']);
});
答案 1 :(得分:0)
你可以使用Resource Collections
GravelTypeResourceCollection::make($collection);
并且由于您可以在 eloquent 集合上使用 load 和 loadMissing,因此您可以这样做
class GravelTypeResourceCollection extends ResourceCollection
{
$collects = GravelTypeResource::class;
public function __construct($resource){
$resource->loadMissing(['gravel_pits']);
parent::__construct($resource);
}
}