AngularJS + Laravel - Eloquent按用户ID检索用户名

时间:2015-08-02 20:37:18

标签: json angularjs laravel orm eloquent

我正在构建一个前端有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方面。

提前致谢!

1 个答案:

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

您将获得发布对象的集合,并且每个对象都有一个用户属性来保存相关用户。