我的数据透视表还有其他字段......
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
答案 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');
}