サーチ…


シーダーを動かす

新しいSeederをDatabaseSeederクラスに追加することができます。

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }

データベースシーダーを実行するには、Artisanコマンドを使用します

php artisan db:seed

これにより、DatabaseSeederクラスが実行されます。 --class=オプションを使用して、実行するシーダーを手動で指定することもできます。

* Seederクラスが見つからない場合は、composer dumpautoloadを実行する必要があります。これは通常、artisanコマンドを使用する代わりに手動でシーダークラスを作成する場合に発生します。

シードの作成

データベースシードは、/ database / seedsディレクトリに格納されます。アーティザンコマンドを使用してシードを作成できます。

php artisan make:seed UserTableSeeder

または、 Illuminate\Database\Seederを拡張する新しいクラスを作成することもできます。このクラスは、 run()という名前のパブリック関数でなければなりません。

シーダーを使用したデータの挿入

シーダーでモデルを参照できます。

use DB;
use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

    public function run(){
        # Remove all existing entrie
        DB::table('users')->delete() ;
        User::create([
            'name' => 'Admin',
            'email' => '[email protected]',
            'password' => Hash::make('password')
        ]);

    }
}

モデルファクトリでデータを挿入する

種子内でモデルファクトリを使用したい場合があります。これにより、3人の新しいユーザーが作成されます。

use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

    public function run(){
        factory(User::class)->times(3)->create();    
    }
}

例えば、シード上の特定のフィールドをパスワードのように定義することもできます。これにより、同じパスワードを持つ3人のユーザーが作成されます。

factory(User::class)->times(3)->create(['password' => '123456']);    

MySQLダンプでシードする

シードを作成する前述の例に従います。この例では、MySQL Dumpを使用してプロジェクトデータベースにテーブルをシードします。シードする前にテーブルを作成する必要があります。

<?php

use Illuminate\Database\Seeder;

class UserTableSeeder extends Seeder
{

    /**
     * Run the database seeds.
     *
     * @return void
     */
     public function run()
     {
         $sql = file_get_contents(database_path() . '/seeds/users.sql');
    
         DB::statement($sql);
      }
}

私たちの$ sqlはusers.sqlダンプの内容になるでしょう。ダンプにはINSERT INTO文が必要です。ダンプを保管する場所はあなた次第です。上記の例では、プロジェクトディレクトリ\database\seeds格納されてい\database\seeds 。 laravelのヘルパー関数database_path()を使用し、ダンプのディレクトリとファイル名を追加します。

INSERT INTO `users` (`id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES
(1, 'Jane', '[email protected]', 'superSecret', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00'),
(2, 'John', '[email protected]', 'sup3rS3cr3t', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00');

DB::statement($sql)は、Seederが実行されると挿入を実行します。前の例と同様に、 UserTableSeederUserTableSeederによって提供されたDatabaseSeederクラスに置くことができます:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }
}

プロジェクトディレクトリphp artisan db:seed CLIから実行します。あるいは、 php artisan db:seed --class=UsersTableSeederを使って単一のクラスに対してphp artisan db:seed --class=UsersTableSeederを実行することもできます

fakerおよびModelFactoriesを使用して種子を生成する

1)基本的な簡単な方法

データベース駆動型アプリケーションでは、テストやデモの目的で、システムにあらかじめデータを組み込む必要があります。

このようなデータを作成するには、まずシーダークラスを作成します

ProductTableSeeder

use Faker\Factory as Faker;
use App\Product;

class ProductTableSeeder extends DatabaseSeeder {

public function run()
{
    $faker = $this->getFaker();

    for ($i = 0; $i < 10; $i++)
    {
        $name =         $faker->word;
        $image =        $faker->imageUrl;
       
        Modelname::create([
            'name' => $name,
            'image' => $image,
        ]);
      }
    }
 }

シーダークラスを実行できるようにするには、実行したいシーダーの名前を渡すだけで、DatabaseSeederクラスから呼び出すことができます。

Illuminate \ Database \ Seederを使用します。

class DatabaseSeeder extends Seeder {

    protected $faker;

    public function getFaker() {
        if (empty($this->faker)) {
            $faker = Faker\Factory::create();
            $faker->addProvider(new Faker\Provider\Base($faker));
            $faker->addProvider(new Faker\Provider\Lorem($faker));
        }
        return $this->faker = $faker;
    }
    public function run() {
        $this->call(ProductTableSeeder::class);
    }
}

Seederを作成した後、 $ composer dump-autoloadを実行するのを忘れないでください。artisanコマンド$ php artisan make:seeder Nameシーダーを作成しない限り、作者によって自動的にオートロードされないので、

これで、この職人のコマンドphp artisan db:seed実行することで、種をつける準備ができましたphp artisan db:seed

2)モデル工場を利用する

まず、 App/database/factories/ModelFactory.php各モデルのデフォルトの属性セットを定義します

ユーザーモデルを例として取り上げると、ModelFactoryのように見えます

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

今すぐテーブルシーダーを作成するphp artisan make:seeder UsersTableSeeder

これを追加します

public function run()
{
    factory(App\User::class, 100)->create()
}

これをDatabaseSeeder追加しDatabaseSeeder

public function run()
{
    $this->call(UsersTableSeeder::class);
}

これにより、100レコードのテーブルが作成されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow