Billy
Billy

Reputation: 2963

How to insert multiple rows from a single query using eloquent/fluent

I have the following query:

  $query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();

and as expected I get the following result:

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]

Is there a way of copying the above result into another table so that my table looks like this?

ID|user_id|subject_id
1 |8      |9
2 |8      |2

The problem I have is that the $query can expect any number of rows and so im unsure how to iterate through an unknown number of rows.

Upvotes: 231

Views: 369619

Answers (3)

Kreshnik Hasanaj
Kreshnik Hasanaj

Reputation: 5005

It is really easy to do a bulk insert in Laravel using Eloquent or the query builder.

You can use one of the following techniques.

$data = [
    ['user_id'=>'Coder 1', 'subject_id'=> 4096],
    ['user_id'=>'Coder 2', 'subject_id'=> 2048],
    //...
];
  1. Eloquent approach:
Model::insert($data); // calls mutators including timestamps
  1. Query Builder approach:
DB::table('table')->insert($data); // does not call mutators

Upvotes: 452

Rock Dial
Rock Dial

Reputation: 179

It is really easy to do a bulk insert in Laravel with or without the query builder. You can use the following official approach.

Entity::upsert([
    ['name' => 'Pierre Yem Mback', 'city' => 'Eseka', 'salary' => 10000000],
    ['name' => 'Dial rock 360', 'city' => 'Yaounde', 'salary' => 20000000],
    ['name' => 'Ndibou La Menace', 'city' => 'Dakar', 'salary' => 40000000]
], ['name', 'city'], ['salary']);

Upvotes: 8

Vishal Varshney
Vishal Varshney

Reputation: 905

using Eloquent

$data = array(
    array('user_id'=>'Coder 1', 'subject_id'=> 4096),
    array('user_id'=>'Coder 2', 'subject_id'=> 2048),
    //...
);

Model::insert($data);

Upvotes: 37

Related Questions