Laravel嵌套查询生成器Json响应

时间:2017-01-11 16:20:27

标签: php json laravel eloquent laravel-5.3

我试图从查询构建器中获取某个结构,该结构看起来像:

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')

提前致谢。

3 个答案:

答案 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);

现在,您的用户模型将包含所有附加的角色,您可以按照所需的方式输出。

请参阅Laravel Eloquent Docs

答案 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]);