LoginSignup
1
1

More than 3 years have passed since last update.

[Laravel][Homestead] Seederを使ってテストデータを作成してみる

Last updated at Posted at 2019-07-08

Seederとは

テストデータをデータベースに設定するための機能。シーダーはdatabase/seedsに保存する。
デフォルトでDatabaseSeederクラスが定義されている。このクラスからcallメソッドで他のシーダーを呼び出すことで、シーディングの順番をコントロールできる。

テーブル名について

Seederを使うに当たって、テーブル名を複数形で定義した方が都合が良い。
例えば、テーブル名hoges、レコードhogeのようなイメージ。

シーダーを生成してみる

シーダーを作成するには以下のコマンドを実行します。作成されたシーダーはdatabase/seedsに格納されます。

$ php artisan make:seeder HogesTableSeeder

シーダーを利用するためにはDatabaseSeederに呼び出したいシーダーを追加します。

database/seeds/DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

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

シーダーを編集してみる

database/seeds/HogesTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class HogesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // ここにレコードを追加処理を記述する
        $now = \Carbon\Carbon::now();
        for ($i = 1; $i <= 50; $i++) {
          $hoge = [
            "name" => "name" . $i,
            "mail" => "user" . $i . "@localhost",
            "created_at" => $now,
            "updated_at" => $now,
          ];
          DB::table("hoges")->insert($hoge);
        }
    }
}

シーダーを実行してみる

// DataBaseSeederを実行する
$ php artisan db:seed
// 特定のファイルを個別に実行する
$ php artisan db:seed --class=HogesTableSeeder
testapp_db=# select * from hoges;
 id |  name  |       mail       | comment | type |     created_at      |     updated_at
----+--------+------------------+---------+------+---------------------+---------------------
  1 | name1  | user1@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
  2 | name2  | user2@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
  3 | name3  | user3@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
  4 | name4  | user4@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
  5 | name5  | user5@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
  6 | name6  | user6@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
  7 | name7  | user7@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
  8 | name8  | user8@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
  9 | name9  | user9@localhost  |         | C    | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
(以下略)

データベースを完全に再作成したい場合は、以下のコマンドが便利。

$ php artisan migrate:refresh --seed

参考

Laravel Document

1
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
1
1