我试图从查询构建器中获取某个结构,该结构看起来像:
rdd.foreachPartition { case (data) =>
val largeThing = LargeThing()
data.foreach { //etc. }
}
如您所见,我需要将关系嵌套,在本例中为User to Roles。
我可以使用{
"status": "success",
"data": {
"id": 1,
"email": "test@test.com",
"birth_date": "1992-08-17",
"gender": "M",
"is_active": 1,
"role": {
"id": 1,
"name": "Admin",
"created_at": "2017-01-11 15:16:14",
"updated_at": null
}
}
}
的热切加载来获得此结构。
我有这个查询,但它返回一列中的所有内容。 有什么办法可以使用查询构建器获得相同的结构吗? 使用急切加载不好的做法?
User::with('role')
提前致谢。
答案 0 :(得分:2)
我认为急切加载是最好的做法。它是处理数据的可读和可维护的方式,它返回方便的结构化数据等。
当然,您可以使用查询生成器甚至原始查询获得相同的结果,但在一天结束时,您将获得一个不可维护的应用程序。
所以,我建议你留下来:
User::with('role')->get();
答案 1 :(得分:0)
如果您设置了多对多关系,则可以通过调用关系方法将其添加到查询的模型中。
在您的模型中,您可以定义关系:
public function roles() {
return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
}
在您的控制器中,您可以像这样访问它:
$user = User::find(id);
$user->roles;
return response()->json($user);
现在,您的用户模型将包含所有附加的角色,您可以按照所需的方式输出。
答案 2 :(得分:0)
渴望加载将是“Laravel”方式的最佳实践。假设您拥有Role
模型且您的User
模型具有以下关系:
public function role()
{
return $this->belongsTo(Role::class);
}
您可以通过以下方式获得所需的回复:
$user = User::with('role')->find($user_id);
return response()->json(['status' => 'success', 'data' => $user]);