我试图在数据透视表中实现简单的插入,但是我不明白为什么它不起作用的原理。
我有一个Languages表,其中包含用语言填充的ID,名称和代码。我有一个填充用户的用户表。中间的表是users_languages,其列为user_id和language_id。
我的请求有这样的内容
{
"languages": [1, 2] -> language ids
}
我在Users模型中使用的语言方法如下:
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;
}
我得到的结果实际上是它试图在Languages表中创建一个新条目,而不仅仅是在user_id和language_id之间建立连接。
我一直在浏览文档和一些文章,了解它是如何工作的,但是我发现没有一种解决方案有效。我在项目中使用Lumen 5.5。预先感谢您的帮助!
答案 0 :(得分:1)
使用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;
}