duanji7881
2018-07-14 23:37
浏览 63
已采纳

在数据透视表中以eloquent保存数据

I am trying to achieve a simple insert into a pivot table but I cannot understand the principle why it does not work.

I have a Languages table which contains an id, name and code populated with languages. And I have a users table populated with users. The middle table is users_languages which has the columns user_id and and language_id.

My request has something like this

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

My languages method into the Users model looks like this:

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

I am trying to add the languages like this:

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

    return $this;
}

The result I get is actually the its trying to create a new entry into the Languages table instead of just making a connection between the user_id and language_id.

I was looking through the documentation and some articles how this works but I none of the solutions I found worked. I am using Lumen 5.5 for my project. Thank you in advance for your help!

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongliao6777 2018-07-15 00:22
    已采纳

    Use attach():

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

    Use sync() if you want to remove the existing pivot entries.

    public function setLanguages(array $languages) : self
    {
        $this->language()->sync($languages);
    
        return $this;
    }
    
    已采纳该答案
    打赏 评论

相关推荐 更多相似问题