在数据透视 table 中使用 eloquent 保存数据

Saving data with eloquent in a pivot table

我正在尝试实现对枢轴的简单插入 table 但我不明白为什么它不起作用的原理。

我有一个语言 table,其中包含填充有语言的 ID、名称和代码。我有一个 users table 填充了用户。中间的 table 是 users_languages,其中包含列 user_id 和 language_id.

我的请求是这样的

{
   "languages": [1, 2] -> language ids
}

我在用户模型中的语言方法如下所示:

public function language() : BelongsToMany
{
    return $this
        ->belongsToMany(Language::class, 'users_languages')
        ->withPivot('user_id', 'language_id');
}

我正在尝试添加这样的语言:

public function setLanguages(array $languages) : self
{
    $this->language()->delete();
    $this->language()->createMany($languages);

    return $this;
}

我得到的结果实际上是它试图在语言 table 中创建一个新条目,而不是仅仅在 user_id 和 language_id 之间建立联系。

我正在查看文档和一些文章这是如何工作的,但我 none 找到了有效的解决方案。我在我的项目中使用 Lumen 5.5。预先感谢您的帮助!

使用attach():

public function setLanguages(array $languages) : self
{
    $this->language()->attach($languages);

    return $this;
}

如果要删除现有数据透视条目,请使用 sync()

public function setLanguages(array $languages) : self
{
    $this->language()->sync($languages);

    return $this;
}