如何将数据插入数据透视表 table 和 laravel eloquent 内的附加字段

How to insert data to the additional field which is inside pivot table with laravel eloquent

我的数据透视表 table 有附加字段...

id  |  user_id   | language_id  | level
---------------------------------------

和我的代码:

User::find($this->userId)->languages()->attach(['language_id' => $lang_id, 'level' => $level]);

但结果是:

id  |  user_id   | language_id  | level
---------------------------------------
1       1            1            null
1       1            2            null

实际上,第二行的language_id必须是第一行的水平...

我怎样才能正确地做到这一点?

    id  |  user_id   | language_id  | level
     ---------------------------------------
     1       1            1            2

根据 the docs,您需要使用关系定义数据透视表 table 的数据列。

public function languages() {
  return $this->belongsToMany('User')->withPivot('level');
}

attach() 的工作方式有点不同。第一个参数是其他模型的id或实例,第二个参数是其他数据透视字段:

User::find($this->userId)->languages()->attach($lang_id, ['level' => $level]);

正如@ceejayoz 提到的,您也没有在您的关系中定义 withPivot()。这意味着 level 将不会出现在结果中。通过在关系的两边添加 withPivot() 来改变它:

public function languages() {
    return $this->belongsToMany('Language')->withPivot('level');
}