Laravel雄辩复杂的关系查询

时间:2013-12-28 18:21:05

标签: php mysql laravel eloquent

期望的输出:

Post
   uid
   comments
          uid
          author
             username
          likes
             uid
                username
   likes
          uid
          user
             username
   author
          uid
          user
             username

所以目前我有这篇文章的所有评论,喜欢和作者 但是它们都只包含UID。

HERE :现在我想在评论,喜欢和作者上添加用户名信息,这样我就可以获得喜欢帖子和其他元素的用户的USERNAME或FIRST_NAME。

要打破它。

  • 每个帖子都包含帖子详情,评论,喜欢和作者
  • 目前在评论中是作者用户数据(正确)
  • 目前评论中的userdata包含avatar_id(错误,我想要头像链接)
  • 目前在喜欢的内容是user_id(错误,我想要user_data)
  • 目前作者内部是用户数据,但只是头像的ID(错误,我想从user_avatars表中链接到头像

我的帖子模型。

/**
 * Author of a post.
 *
 * @return Object
 */
public function author()
{
    return $this->belongsTo('User', 'uid', 'uid');
}   

/**
 * Comments of a post.
 *
 * @return Object
 */
public function comments()
{
    return $this->hasMany('Post', 'reply_to', 'pid')->with('author');
}

/**
 * Likes of a post.
 *
 * @return Object
 */
public function likes()
{
    return $this->hasMany('Like', 'pid', 'pid');
}    

我的控制器

$post = Post::with('comments', 'likes', 'author')->where('jid', 2)->get();

return $post;

技术上,Author()也应该加入user_avatars和文件,因为user_avatars包含File_ID和USER_ID,files表包含File_ID和avatar的链接。 怎么做?


另一个注意事项:'调用未定义的方法Illuminate \ Database \ Query \ Builder :: author()'
如果我这样做:

public function likes()
{
    return $this->hasMany('Like', 'pid', 'pid')->with('author');
} 

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我这样解决了:

在你发布模型:

public function user()
{

    return $this->hasOne('User', 'uid', 'uid');

}

然后在你的帖子控制器中:

$post = Post::where('id', $id)->with('user')->first();

然后在您的后刀片视图中

$post->user->firstname;

当然,您也可以将评论和喜欢添加到您的Eloquent声明中。

如果这解决了您的问题,请告诉我。我可以将答案编辑成更好的解决方案。