假设我有一个帖子和用户模型,我想像这样管理它们之间的关系:
惯例是创建一个名为 post_user 的数据透视表,但在本例中我们有两个,所以我是否为每个关系创建两个表,或者是否有办法将这两个关系放在同一个表中。
我也想尽可能遵循 Laravel 约定,因此将枢纽命名为 post_user 以外的名称听起来是个坏主意
我显然不能制作两个具有相同名称的表,所以这是不可能的
你不必创建两个表,在 Laravel 约定中,你可以向数据透视表添加更多列,下面是一个示例: 在帖子模型中:
public function users()
{
return $this->belongsToMany(User::class, 'post_user')
->withPivot([
'liked'
])->using(PostUser::class);
}
在用户模型中:
public function posts()
{
return $this->belongsToMany(Post::class, 'post_user')
->withPivot([
'liked',
])->using(PostUser::class);
}
然后你可以像下面这样填写:
$user->posts()->attach($post, [
'liked' => true, // false
]);
// OR
$post->users()->attach($user, [
'liked' => true, // false
]);