LoginSignup
2
1

laravel Seeder(シーダー)を使ってみる

Last updated at Posted at 2021-03-13

目的

  • laravelでSeeder(シーダー)を使う方法をまとめる。

環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.5)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.8 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする
Laravel バージョン 8.X commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする
Node.jsバージョン v12.14.1 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでNode.jsをインストールする

情報

  • limitsというテーブルが存在し、下記のようなカラムの設定になっているとする。

    mysql> show full columns from limits;
    +------------+-----------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
    | Field      | Type            | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
    +------------+-----------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
    | id         | bigint unsigned | NULL               | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
    | name       | varchar(255)    | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references | 期限    |
    | created_at | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
    | updated_at | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
    | deleted_at | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
    +------------+-----------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
    
  • limitsテーブルのnameカラムが「今日中」「明日中」「今週中」「今月中」「未定」となるレコードを追加したいとする。

  • 今回の方法で紹介するコマンドは特筆しない限り前のコマンドと同じディレクトリで実行するものとする。

方法

  1. アプリ名ディレクトリで下記コマンドを実行してSeederのファイルを作成する。

    $ php artisan make:seeder LimitTableSeeder
    
  2. 下記コマンドを実行して作成したSeederファイルを開く。

    $ vi database/seeders/LimitTableSeeder.php
    
  3. 開いたSeederファイルを下記のように修正する。

    アプリ名ディレクトリ/database/seeders/LimitTableSeeder.php
    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    use Carbon\Carbon;
    use Illuminate\Support\Facades\DB;
    
    class LimitTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            $limit_names = [
                '今日中',
                '明日中',
                '今週中',
                '今月中',
                '未定',
            ];
    
            $now = Carbon::now();
            foreach ($limit_names as $limit_name) {
                $limit_info = [
                    'name' => $limit_name,
                    'created_at' => $now,
                    'updated_at' => $now,
                ];
                DB::table('limits')->insert($limit_info);
            }
        }
    }
    
  4. 下記コマンドを実行して作成したSeederを登録するファイルを開く。

    $ vi database/seeders/DetabaseSeeder.php
    
  5. 下記のように内容を追記する。

    アプリ名ディレクトリ/database/seeders/DetabaseSeeder.php
    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    
    class DatabaseSeeder extends Seeder
    {
        /**
         * Seed the application's database.
         *
         * @return void
         */
        public function run()
        {
            // \App\Models\User::factory(10)->create();
            $this->call(LimitTableSeeder::class);
        }
    }
    
  6. 下記コマンドを実行してシーディングの実行を行う。

    $ php artisan db:seed
    
  7. MySQLにログインしlimitsテーブルを確認したところ下記のように表示されたため正常にSeederで登録指示したファイルが正常にシーディングされたことがわかる。

    mysql> select * from limits;
    +----+-----------+---------------------+---------------------+------------+
    | id | name      | created_at          | updated_at          | deleted_at |
    +----+-----------+---------------------+---------------------+------------+
    |  1 | 今日中    | 2021-03-13 12:00:03 | 2021-03-13 12:00:03 | NULL       |
    |  2 | 明日中    | 2021-03-13 12:00:03 | 2021-03-13 12:00:03 | NULL       |
    |  3 | 今週中    | 2021-03-13 12:00:03 | 2021-03-13 12:00:03 | NULL       |
    |  4 | 今月中    | 2021-03-13 12:00:03 | 2021-03-13 12:00:03 | NULL       |
    |  5 | 未定      | 2021-03-13 12:00:03 | 2021-03-13 12:00:03 | NULL       |
    +----+-----------+---------------------+---------------------+------------+
    5 rows in set (0.00 sec)
    

追記

  • 「production環境では動作しないseederにしたい」場合などは下記のように記載すればよい気がする。

    アプリ名ディレクトリ/database/seeders/DetabaseSeeder.php
    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    
    class DatabaseSeeder extends Seeder
    {
        /**
         * Seed the application's database.
         *
         * @return void
         */
        public function run()
        {
            if (!(config('app.env') === 'production')) {
                $this->call(LimitTableSeeder::class);
            }
        }
    }
    
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1