在多行上插入数组
Posted
技术标签:
【中文标题】在多行上插入数组【英文标题】:Insert array on multiple rows 【发布时间】:2015-05-16 12:22:24 【问题描述】:我有一个多选:
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();
有没有更好的方法来做到这一点?当感觉 Laravel 应该有某种在多行上插入多个值的内置方法时,使用 foreach 循环似乎很奇怪。
【问题讨论】:
Bulk Insertion in Laravel using eloquent ORM的可能重复 2012 年的答案。从那时起,Laravel 发生了很大变化。 另外,insert()
不会更新 created_at
或 updated_at
。
您是否尝试过先循环创建数组本身,然后在循环完成后插入数组?
Input::get('tags')
已经是一个数组。不知道你的意思。
【参考方案1】:
正如 Laravel 文档提供的那样,
您也可以使用同步方法来附加相关模型。同步 方法接受要放置在数据透视表上的 ID 数组。在这之后 操作完成,只有数组中的ID会在 模型的中间表:
在这种情况下,
$colors = Input::get('tags');
$user->colors()->sync($colors);
请确保在您的 User
模型中设置关系:
public function colors()
return $this->belongsToMany('Color');
当您的参数不是数组时,您也可以使用attach
方法。更清楚地说,Here 是 attach
和 sync
之间的区别。
【讨论】:
以上是关于在多行上插入数组的主要内容,如果未能解决你的问题,请参考以下文章