cent040's avatar

Batch insert in laravel 5.2

I am using a API's with lot's of calculation almost 100 database fields at the end with a big Foreach loop.

In every iteration i insert data in database. I want to insert data in once at the end (Batch Insert like in CodeIgniter).

Any body have idea how to insert all data at the end of iteration. instead of every iteration it insert row in database.

I want to insert data at the end of loop. Any help or idea appreciated.

0 likes
5 replies
cent040's avatar

Here i got answer Use insert() method for bulk insertion. First, build an array with this structure:

$data = [
  ['name' => 'John', 'age' => 25],
  ['name' => 'Maria', 'age' => 31],
  ['name' => 'Julia', 'age' => 55],
];

Then insert the data using Eloquent model:

Model::insert($data);

Or using query builder:

DB::table('table_name')->insert($data);
4 likes
NielsNumbers's avatar

This insert function from query builder is not doing a batch insert. It will still insert every row one-by-one.

If you want a batch insert, you need to write your query yourself and use DB:statement. Something like this:

INSERT INTO users ('name', 'age') VALUES ('Max', 50), ('Bianka', 15)

theViz02's avatar

You can make chunks of array using array_chunk() having preference of your data's chunk size.

BHiko's avatar

In my setup, with Laravel 8 and SQLite, the DB::table()->insert($rows) does a single insert at SQL level, like so:

  insert into
    "iam_uploaders" (
      "created_at",
      "id",
      "ip",
      "mac",
      "sn",
      "type",
      "updated_at",
      "version"
    )
  values
    (
      '2022-11-17 12:21:51',
      1,
      '94.225.155.108',
      'D0BAE4B4060B',
      'DBAE40A1',
      'a',
      '2022-11-17 12:21:51',
      'i.75.97.9'
    ),
    (
      '2022-11-17 12:21:51',
      2,
      '94.225.155.108',
      'D0BAE4B4060B',
      'DBAE40A1',
      ...
1 like

Please or to participate in this conversation.