我正在构建一个前端有Angular而后面有Laravel的应用程序。我的问题是,如何使用posts表上的“author_id”对用户表上的“user_id”返回/检索用户的全名?我有一个用户表和一个帖子表,如下所示:
users table
user_id | fullname | email | password | active
posts table
post_id | author_id (FK-user_id on users table) | text | timestamps
我的用户模型如下所示:
public function post()
{
return $this->hasMany('Post', 'author_id');
}
我的帖子模型看起来像这样:
public function user()
{
return $this->belongsTo('User', 'author_id');
}
假设我的路由是正确的(我可以提供它,如果需要的话),我的PostController有这个方法来检索帖子:
public function getAllPostsByUserID($user_id)
{
$posts = Post::where("user_id", "=", $user_id)
->get();
if($posts) {
return Response::json($posts);
} else {
return Response::json(array('flash'=>'No posts by this user.'),500);
}
}
现在,我正在检索包含所有用户帖子的JSON,但由于posts表使用author_id,我无法显示用户名,只显示他的ID。我已经看到它如何在Laravel / Blade上工作,你可以链接方法然后访问用户的全名,因为hasMany或belongsTo的Eloquent关系,但我似乎无法弄清楚如何在返回JSON时执行此操作Angular方面。
提前致谢!
答案 0 :(得分:0)
要检索用户的所有帖子,您可以执行以下操作:
$user = User::with('post')->whereUserId($user_id)->first();
这将为您提供$ user对象,您将能够使用
访问用户帖子的集合$posts = $user->post;
这也不是必要的:
return Response::json($posts);
当您返回Collection或Eloquent对象时,Laravel会自动将其序列化为 JSON 。如果您切换到上面的代码来获取用户的帖子,那么就足够了:
return $user;
<强>更新强>
要获取相关用户的帖子集合,您可以执行以下操作:
$posts = Post::with('user')->get();
您将获得发布对象的集合,并且每个对象都有一个用户属性来保存相关用户。