web-dev-qa-db-ja.com

Seed一度に複数の行laravel 5

現在、ユーザーテーブルをシードしようとしています。 2行でこのようにしようとすると、失敗します。偽のデータを作成するために、$ users配列内の2つの配列の代わりに単一の配列を使用するだけでうまく機能します。

私は何を間違っていますか、これを行う適切な方法は何ですか?

class UserTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();

        $users = [
            ['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => '[email protected]', 'password' => bcrypt('carrotz124')],
            ['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => '[email protected]', 'password' => bcrypt('carrotz1243')],
        ];

        User::create($users);
    }

}

34
Stephan-v

モデルを使用する必要がある場合、ループが必要です。

_foreach($users as $user){
    User::create($user);
}
_

それ以外の場合は、DB::table()およびinsertを使用できます。

_DB::table('users')->insert($users);
_

実際には、モデルでinsert()を呼び出すこともできます(結果のクエリは同じです)

_User::insert($users);
_

insertメソッドを選択すると、タイムスタンプやモデルイベントなどの特別なEloquent機能が失われます。

46
lukasgeiter

これはLaravel 5.3

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */

    public function run()
    {
        // check if table users is empty
        if(DB::table('users')->get()->count() == 0){

            DB::table('users')->insert([

                [
                    'name' => 'Administrator',
                    'email' => '[email protected]',
                    'password' => bcrypt('password'),
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ],
                [
                    'name' => 'Agency',
                    'email' => '[email protected]',
                    'password' => bcrypt('password'),
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ],
                [
                    'name' => 'End',
                    'email' => '[email protected]',
                    'password' => bcrypt('password'),
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ]

            ]);

        } else { echo "\e[31mTable is not empty, therefore NOT "; }

    }
}
30
lewis4u
public function run()
{
    //
    for ($i=0; $i < 1000; $i++) { 
         DB::table('seo_contents')->insert([
            'title' => str_random(10),
            'content' => str_random(100),
            'created_at'=>date('Y-m-d H:i:s'),
            'updated_at'=>date('Y-m-d H:i:s'),

        ]);
    }

}
2
Simple Test

Createではなくinsertを使用する必要があります。したがって、コードは次のようになります。

class UserTableSeeder extends Seeder {

  public function run()
  {
    DB::table('users')->delete();

    $users = [
        ['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => '[email protected]', 'password' => bcrypt('carrotz124')],
        ['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => '[email protected]', 'password' => bcrypt('carrotz1243')],
    ];

    User::insert($users);
  }

}
1
Rikesh Shrestha