📚

Seederの作成・実行

2023/03/24に公開

Laravel勉強記録


実行環境


OS:Mac
PHP:8.0
Laravel:8

Seederとは?


データベースに初期データを登録するために使用
使用例としては最初から用意しておきたいマスターデータやテスト用のデータを作成するときに使用

Seederの作成


php artisan make:seeder ファイル名

Seeder created successfully.と表示されればOK!!

作成されたSeederのファイルはdatabase/seeders配下に配置されている

初期状態としてはこのような状態

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class seederファイル名 extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

runメソッドがSeederを実行したときに処理されるメソッド

Seeder上でのデータ登録


https://codelikes.com/laravel-eloquent-basic/

Seederを使用してデータ登録を行うには登録を行うテーブルのModelが必要
なので、Seederと一緒にModelの作成も行う
※Seederの実行のみであれば特にModel側に記載は必要ない

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Fruit;

class FruitSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Fruit::create([
            'name' => 'リンゴ',
            'color' => '赤',
            'price' => '100',
        ]);

        Fruit::create([
            'name' => 'ぶどう',
            'color' => '紫',
            'price' => '300',
        ]);

        Fruit::create([
            'name' => 'みかん',
            'color' => '黄',
            'price' => '110',
        ]);
    }
}

追加したいテーブルのModelをuseを行う

DatabaseSeederを編集


作成したSeederファイルは、database/seeders/DatabaseSeeder.phpから呼び出すようにして使用する

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
      // 単一で実行する場合
        $this->call(FruitSeeder::class);

      // 複数指定で実行すル場合
      $this->call([
        FruitSeeder::class,
        FruitSeeder::class,
      ]);
    }
}

Seederを実行


php artisan db:seed

以下が表示されればOK

Seeding: Database\Seeders\FruitSeeder
Seeded:  Database\Seeders\FruitSeeder (33.59ms)
Database seeding completed successfully.

Seederを指定して実行


php artisan db:seedでDatabaseSeeder.phpに書いたSeederを実行するが、
DatabaseSeeder.phpに書かなくても、Seederを指定して実行することも可能

php artisan db:seed --class FruitSeeder

Discussion