在多行上插入数组

时间:2015-03-13 21:15:28

标签: laravel laravel-4

我有一个多选:

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应该有一些在多行上插入多个值的内置方法。

1 个答案:

答案 0 :(得分:1)

正如Laravel doc所提供的那样,

  

您也可以使用同步方法附加相关模型。同步   method接受要放置在数据透视表上的ID数组。在这之后   操作完成后,只有数组中的ID才会出现   模型的中间表:

在这种情况下,

$colors = Input::get('tags');
$user->colors()->sync($colors);

请务必在User模型中设置关系:

public function colors()
{
    return $this->belongsToMany('Color');
}

当参数不是数组时,您也可以使用attach方法。为了更清楚,Hereattachsync之间的差异。