タグ: Seeder

  • LaravelでSeeder+Factoryの使い方

    LaravelでSeeder+Factoryの使い方

    Laravelで開発していて、SeederとFactoryの使い方でこんがらがったので、整理しました👍

    用意するもの

    以下は新しく作成するときに必要なファイルです。

    • modelファイル
    • migrationファイル
    • Seederファイル
    • Factoryファイル

    簡単に用意する方法

    上記4枚のファイルをartisanを使って簡単に作成する方法があります。

    php artisan make:model Sample -msf

    artisanでmodelを作成します。

    「-」でオプションを付与できるのでmigrationのm、Seederのs、Factoryのfを付与します。

    書く内容

    それぞれのファイルに書く内容は以下です。

    modelファイル

    $fillableを作成した方がいいです👍

    migrationファイル

    テーブルの定義を書く。

    Seederファイル

    実行するFactoryファイルを追加する。

    Factoryファイル

    実際に作成したいテストのデータを書く。

    fakerを使用するのが一般的と思われる。

    DatabaseSeederファイル

    上記の内容に加えて、Seederを司る大元のファイルであるDatabaseSeederに今回で作成したSeederファイルを登録しましょう。

    <?php
    namespace Database\Seeders;
    use Illuminate\Database\Seeder;
    class DatabaseSeeder extends Seeder
    {
        /**
         * Seed the application's database.
         *
         * @return void
         */
        public function run()
        {
            $this->call([
                SampleSeeder::class
            ]);
        }
    }

    実行方法

    migrationファイルでデータを格納する受け皿を用意しました。

    Modelを作成して、生成するデータの雛形を作成しました。

    Factoryファイルで雛形を具体的に書きました。

    Seederファイルでその雛形を実際に作成します。

    以下のコマンドを実行してください。

    php artisan migrate:refresh --seed
  • Seederとは

    Seederとは

    会社のインターンで「Seeder」に遭遇した。

    Seederとは何かまとめた。

    Seederに遭遇した状況

    会社のインターンに参加して初日に開発環境構築をしてた。

    会社ではLaravelを使っている。

    会社の仕様書があって、それ通りにパソコンの環境を揃えていた。

    Docker内に環境を作っていたが、本番環境と同様のDBをmigrateで生成した。

    https://sunablog.tokyo/2021/08/11/post-2091/
    Migrationについては、この投稿を参考

    そのあとに「Seederを実行するように」と言われた。

    ここで初対面した。

    Seederでできること

    Seederを使うとDBにダミーデータを挿入することができる。

    下からの説明を見れば分かる。

    Seederに実行方法

    以下のようにコマンドを実行するとUserTableSeeder.phpというファイルが生成される。

    php artisan make:seeder UserTableSeeder

    このファイル内のrunメソッドにDBのtableに挿入したい実際のデータを記述する。

    例えば以下のようになる。

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    use Illuminate\Support\Facades\DB;
    
    class UserTableSeeder extends Seeder
    {
        public function run()
        {
            DB::table('users')->insert([
                'name' => 'suna',
                'email' => 'suna_sample@email.com',
                'sex' => 'male'
            ]);
        }
    }

    これのみだとSeederファイルを設定しただけなので、これを実際に作動させれるようにDatabaseSeeder.phpファイルで先ほどのUserTableSeeder.phpが呼び出されるように処理を書く。

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    
    class DatabaseSeeder extends DatabaseSeeder
    {
        public function run()
        {
            $this->call('UserTableSeeder::class');
        }
    }

    これでプログラムは完了。

    次のコマンドを実行することで、実際にSeederが作動してDBにデータが挿入される。

    php artisan db:seed --class=UserTableSeeder