如何为一对多关系Laravel创建关联(在数据透视表中)?

时间:2018-09-25 17:09:19

标签: php laravel associations

我正在尝试在两个模型PostPostVersion之间创建链接。我认为该问题可能是由命名约定引起的,但我不确定。这些模型之间的关系定义如下:

Post

public function postVersion()
{
    return $this->hasMany(PostVersion::class);
}

PostVersion

public function post()
{
    return $this->belongsTo(Post::class);
}

我创建了一个名为PostPostVersion的表,其结构如下:

Schema::create('post_post_version', function (Blueprint $table) {
        $table->integer('post_id');
        $table->integer('post_version_id');
        $table->primary(['post_id', 'post_version_id']);
    });

创建了$post$postVersion之后,请尝试以下操作:

$post->postVersion()->associate($postVersion);

但是它不起作用,并且我没有收到错误消息。我该如何解决这个问题并在PostPostVersion之间建立链接?

1 个答案:

答案 0 :(得分:0)

不是那样的。您应该创建2个表:postspost_versions

posts表中:

Schema::create('posts', function (Blueprint $table) {
    $table->increments('id');
    //
});

post_versions表中:

Schema::create('post_versions', function (Blueprint $table) {
    $table->unsignedInteger('post_id');
    $table->string('version');
    //
});

然后创建一个帖子:

$post->postVersion()->save(new App\Comment(['version' => 'v1.0.0']));