【问题标题】:How do I do a multiple insert in laravel 5.5?如何在 laravel 5.5 中进行多次插入?
【发布时间】:2019-11-19 02:10:30
【问题描述】:

我想在我的 Laravel 项目中进行多次插入,但我不知道该怎么做。我需要循环它还是有任何其他方法可以做到这一点?我有点困惑。我正在使用查询构建器。

控制器代码。

if($request->smsn == 'on'){
            $events->smsnotify = 1;

            $numbers = \DB::table('users')
            ->where('school_id', '=', $sid->school_id)
            ->where('role', '=', $request->group_id)
            ->select('phone','name')
            ->get();

            dd($numbers);


            $sms = DB::table('sms')->insert([
                'user_id' => $sid->id,
                'school_id' => $sid->school_id,
                'msg' => 'New Event '. $request->name,
                'mobile_number' =>  $numbers,
                'name' => 'Sample',
                'isSend' => 1
            ]);



        }

转储结果

Collection {#552 ▼
  #items: array:5 [▼
    0 => {#550 ▼
      +"phone": "+63 (928) 206-5706"
      +"name": "Ayden Kutch"
    }
    1 => {#568 ▼
      +"phone": "(0817) 447-1492"
      +"name": "Ruthie Quigley"
    }
    2 => {#567 ▼
      +"phone": "+63 (920) 203-3874"
      +"name": "Alaina O'Kon"
    }
    3 => {#569 ▶}
    4 => {#570 ▶}
  ]
}

我想像这种格式将它插入我的sms 表中

+----+---------+---------------+---------------+--------+------------+------------+-----------+-------------+
| id | user_id | msg           | mobile_number | isSend | created_at | updated_at | school_id | name        |
+----+---------+---------------+---------------+--------+------------+------------+-----------+-------------+
|  8 |      13 | New Event    |     123456     |      1 | NULL       | NULL       |         2 | Ayden Kutch |
+----+---------+---------------+---------------+--------+------------+------------+-----------+-------------+

在每个名字和数字中。它会生成另一行。

【问题讨论】:

  • 您可以将集合用作数组:foreach($numbers as $rec) {/* insert rec here */},这就是您要问的吗?

标签: php mysql laravel laravel-5


【解决方案1】:

您可以在一个循环中执行多个插入查询,或对一个或多个数组执行单个插入查询,但您需要先构建该数组。

$data = [];

foreach ($numbers as $number) {
    $data[] = [
        'user_id' => $sid->id,
        'school_id' => $sid->school_id,
        'msg' => 'New Event',
        'mobile_number' =>  $number->phone,
        'name' => $number->name,
        'isSend' => 1
    ];
}

DB::table('sms')->insert($data);

这会构建一个包含多个要一起插入的记录的数组。

“您甚至可以通过传递一个数组数组,通过对insert 的一次调用将多条记录插入到表中。每个数组代表要插入到表中的一行”

Laravel 5.5 Docs - Query Builder - Inserts

【讨论】:

  • 你确定吗?可能你需要在循环中使用插入?
  • @AnatoliyR 是的,我确定
  • 只是问,Lara 是我的主要框架,但我从来没有以这种方式进行批量插入
  • 绝对是……除非您为您的风险运行原始查询
  • @AnatoliyR 您可以使用参数自己构建插入查询,所以完全没有风险......这就是DB::insert('INSERT into TABLE ("field1", "field2") values (?, ?), (?, ?), (?, ?)', $parameters); 的绑定参数,无论如何查询构建器最终都会这样做...准备好的陈述是每个人最好的朋友:)
【解决方案2】:

这项工作适合我

$value = array();

foreach ($users as $user) {
$value = array(
    'user_id' => $user->id,
    'name' => $user->name,
    'mobile_number' =>  $user->phone,
);
DB::table('users')->insert($data);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多