我有一个多选:
Form::select('color', array('1' => 'Red', '2' => 'Blue', '3' => 'Green', ... ), null, array('multiple'));
如何将这些值插入到不同行的表中,如下所示:
id | user_id | color
----------------------------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 1 | 4
5 | 2 | 1
6 | 2 | 3
在上面的示例中,id为1
的用户在select中选择了4个不同的值,并且每个值都插入到单独的行中。
我以这种方式工作:
foreach (Input::get('tags') as $key => $value)
{
$user_color = new UserColor;
$user_color->user_id = $user->id;
$user_color->color = $key;
$user_color->save();
}
有更好的方法吗?使用foreach循环看起来很奇怪,因为感觉Laravel应该有一些在多行上插入多个值的内置方法。
答案 0 :(得分:1)
正如Laravel doc所提供的那样,
您也可以使用同步方法附加相关模型。同步 method接受要放置在数据透视表上的ID数组。在这之后 操作完成后,只有数组中的ID才会出现 模型的中间表:
在这种情况下,
$colors = Input::get('tags');
$user->colors()->sync($colors);
请务必在User
模型中设置关系:
public function colors()
{
return $this->belongsToMany('Color');
}
当参数不是数组时,您也可以使用attach
方法。为了更清楚,Here是attach
和sync
之间的差异。