如何在laravel中存储多个多对多关系?

问题描述 投票:0回答:1

假设我有一个帖子和用户模型,我想像这样管理它们之间的关系:

  • 书签(一个帖子可以被许多用户添加书签,反之亦然)
  • 喜欢(与书签相同的想法)

惯例是创建一个名为 post_user 的数据透视表,但在本例中我们有两个,所以我是否为每个关系创建两个表,或者是否有办法将这两个关系放在同一个表中。

我也想尽可能遵循 Laravel 约定,因此将枢纽命名为 post_user 以外的名称听起来是个坏主意

我显然不能制作两个具有相同名称的表,所以这是不可能的

php laravel database-design
1个回答
0
投票

你不必创建两个表,在 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
]);
© www.soinside.com 2019 - 2024. All rights reserved.