我怎样才能得到评论作者的名字?
How can I get the name of comments' author?
这是我的 table 结构:
-- users
+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | Jack |
| 3 | Peter |
+----+-------+
-- posts
+----+---------+----------------------+-----------+
| id | title | body | author_id |
+----+---------+----------------------+-----------|
| 1 | title1 | somthing | 2 |
| 2 | title2 | whatever | 1 |
| 3 | title3 | anything | 3 |
+----+---------+----------------------+-----------+
-- comments
+----+-----------------+---------+-----------+
| id | message | post_id | author_id |
+----+-----------------+---------+-----------+
| 1 | my message | 3 | 2 |
| 2 | whatever | 1 | 3 |
+----+-----------------+---------+-----------+
现在我想要 a post 及其所有评论。这是我的代码:
$post= Posts::orderBy('id', 'DESC')->where('id', $request->id)->first();
$comments = $post->comments;
注意到我在 User
模型中有这个关系:
public function comments()
{
return $this->hasMany('App\Comments','post_id', 'id')->orderBy('id');
}
我的问题是什么?我也想知道评论的作者姓名。我的意思是写评论的人的名字。无论如何,我怎样才能在现有关系上建立关系?
注意: 我可以通过原始 JOIN
做到这一点。但是我想知道如何通过 Laravel 关系来做到这一点?
你可以像这样连接两个表
DB::table('comments')
->join('users', function ($join) {
$join->on('comments.author_id', '=', 'users.id');
})
->get();
为什么要定义与task_id
的关系?
在用户模型中:
public function comments()
{
return $this->hasMany('App\Comments','author_id', 'id');
}
在评论模型中:
/**
* comments belongs to a user.
*/
public function user()
{
return $this->belongsTo('App\User', 'author_id', 'id');
}
现在您可以获得评论的用户
User::where("id",$userId)->with("comments")->orderBy('id', 'DESC')->get();
如果你想得到 post 和所有评论,你应该为 post 模型定义这样的关系。
在posts
模型中定义一个关系:
public function comments()
{
return $this->hasMany('App\Comments','post_id', 'id');
}
在评论模型中:
/**
* comments belongs to a post.
*/
public function post()
{
return $this->belongsTo('App\Posts', 'post_id', 'id');
}
现在:
Posts::where("id",$postId)->with("comments")->orderBy('id', 'DESC')->get();
这是我的 table 结构:
-- users
+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | Jack |
| 3 | Peter |
+----+-------+
-- posts
+----+---------+----------------------+-----------+
| id | title | body | author_id |
+----+---------+----------------------+-----------|
| 1 | title1 | somthing | 2 |
| 2 | title2 | whatever | 1 |
| 3 | title3 | anything | 3 |
+----+---------+----------------------+-----------+
-- comments
+----+-----------------+---------+-----------+
| id | message | post_id | author_id |
+----+-----------------+---------+-----------+
| 1 | my message | 3 | 2 |
| 2 | whatever | 1 | 3 |
+----+-----------------+---------+-----------+
现在我想要 a post 及其所有评论。这是我的代码:
$post= Posts::orderBy('id', 'DESC')->where('id', $request->id)->first();
$comments = $post->comments;
注意到我在 User
模型中有这个关系:
public function comments()
{
return $this->hasMany('App\Comments','post_id', 'id')->orderBy('id');
}
我的问题是什么?我也想知道评论的作者姓名。我的意思是写评论的人的名字。无论如何,我怎样才能在现有关系上建立关系?
注意: 我可以通过原始 JOIN
做到这一点。但是我想知道如何通过 Laravel 关系来做到这一点?
你可以像这样连接两个表
DB::table('comments')
->join('users', function ($join) {
$join->on('comments.author_id', '=', 'users.id');
})
->get();
为什么要定义与task_id
的关系?
在用户模型中:
public function comments()
{
return $this->hasMany('App\Comments','author_id', 'id');
}
在评论模型中:
/**
* comments belongs to a user.
*/
public function user()
{
return $this->belongsTo('App\User', 'author_id', 'id');
}
现在您可以获得评论的用户
User::where("id",$userId)->with("comments")->orderBy('id', 'DESC')->get();
如果你想得到 post 和所有评论,你应该为 post 模型定义这样的关系。
在posts
模型中定义一个关系:
public function comments()
{
return $this->hasMany('App\Comments','post_id', 'id');
}
在评论模型中:
/**
* comments belongs to a post.
*/
public function post()
{
return $this->belongsTo('App\Posts', 'post_id', 'id');
}
现在:
Posts::where("id",$postId)->with("comments")->orderBy('id', 'DESC')->get();