如何将数据插入到具有laravel eloquent的数据透视表内的附加字段中

时间:2015-02-12 14:24:40

标签: laravel laravel-4 eloquent

我的数据透视表还有其他字段......

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

2 个答案:

答案 0 :(得分:2)

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');
}

答案 1 :(得分:1)

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

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