Home » Php » php – Laravel 5 Seeder – multiple rows in DB

php – Laravel 5 Seeder – multiple rows in DB

Posted by: admin July 12, 2020 Leave a comment

Questions:

I was wondering if it’s possible to insert multiple rows like this (or something like this):

<?php

use Illuminate\Database\Seeder;

class SettingTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('settings')->insert(
            [
                'key' => 'username',
                'value' => 'testusername'
            ],
            [
                'key' => 'password',
                'value' => 'plain'
            ]
        );
    }
}

I have a table settings in my database with columns key & value.

The problem with the code above is that he only inserts the first one … .

How to&Answers:

You need to wrap your arrays in another array, so it would look like this:

DB::table('settings')->insert([
    [
        'key' => 'username',
        'value' => 'testusername'
    ],
    [
        'key' => 'password',
        'value' => 'plain'
    ]
]);

Notice the wrapping array.

What you are doing now is actually sending two separate arrays to the insert() method.

Answer:

you can use insert method from eloquent for bulk save like

Settings::insert([[
            'key' => 'username',
            'value' => 'testusername'
        ],
        [
            'key' => 'password',
            'value' => 'plain'
        ]]);

Answer:

Just repeate the DB::table code as much as you want inside the run method!:

DB::table('settings')->insert(
            [
                'key' => 'username',
                'value' => 'testusername1'
            ]
        );

 DB::table('settings')->insert(
            [
                'key' => 'username',
                'value' => 'testusername2'
            ]
        );

 DB::table('settings')->insert(
            [
                'key' => 'username',
                'value' => 'testusername3'
            ]
        );