问题描述
我有三个表,第一个是 posts 表,第二个是 post_users 表和 users 。
post_users 表包含帖子的标记用户。它具有post_id
和user_id
列。
下面是我的工作代码:
DB::table('posts')
->select(
'posts.id AS post_id','posts.likes AS post_likes','post_user.user_id AS tagged_users'
)
->join('post_user','post_user.post_id','posts.id')
->orderBy('posts.created_at','DESC')
->get();
左侧是以上代码的结果,我只想问一下如何实现期望的结果?我也很感谢雄辩的答案。
解决方法
使用laravel-eloquent
的方法如下:
首先,在其模型中设置post和tag之间的关系,这当然与 您的数据库分析:
- 如果您的关系是一对多的:
// Post Model
public function tags()
{
return $this->hasMany('App\Models\Tag');
}
// Tag Model
public function posts()
{
return $this->hasMany('App\Models\Post');
}
- 或者您的关系很多:
// Post Model
public function tags()
{
return $this->belongsToMany('App\Models\Tag');
}
// Tag Model
public function posts()
{
return $this->belongsToMany('App\Models\Post');
}
最后,当您想要获得带有自标记的帖子时,您只需这样做:
Post::with('tags')->get();
尝试一下!
有关更多信息,请阅读docs。