在多行上插入数组

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_atupdated_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 是 attachsync 之间的区别。

【讨论】:

以上是关于在多行上插入数组的主要内容,如果未能解决你的问题,请参考以下文章

MySQLi - 插入多行 - 空 POST 数组

POSTGRESQL 从给定的 JSON 数组中插入多行,使用插入的结果进行其他插入

PHP数组未向数据库插入多行

从数组的一个查询中插入多行[重复]

形成多行插入的数组格式nodejs-mysql

mysql 一次插入多行不同的数据