【发布时间】:2018-01-04 18:14:09
【问题描述】:
如何预先加载资源集合关系?我创建了一个调用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'));
}
这行得通...但是我无法控制我真正想要返回的砾石坑的哪些属性,相反,急切的负载会全部获取。有没有简单的解决方法?
【问题讨论】:
-
::with('author:id,name')直接来自documentation。 -
@Kyslk 哦,漂亮的 5.5 功能!
-
是的 :),您没有指定哪个版本,所以我假设为 :latest
-
如果有5个模型调用它? :) 如果有什么变化,我将不得不更改所有 5 个调用...不是真正的 DRY 解决方案 :)
-
玩关系定义。使用存储库模式(不要!:D - 我个人反对)尝试在其他地方干燥它,使用 IDE 查找+替换。
标签: php laravel eager-loading