0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel ファクトリーを利用したシーディング処理まとめ

Last updated at Posted at 2021-02-08

Laravel ファクトリーを利用したシーディング処理まとめ

Laravelにて、DBを利用する際、ダミーデータを手軽に用意してくれる機能があります。
以下にまとめます。

補足

『PHPフレームワーク Laravel実践開発』 著:掌田津耶乃
の18ページに記載されているSQLを、シーディングとファクトリーを利用して実行するという試みです。

バージョン

Laravel バージョンは6.x

詳細は以下

シーディング
ファクトリー

前提

本には以下の様なSQLを叩いて、ダミーデータを作ってね、と書いてあるが、
自動でそれを行えるようにしたい。

CREATE TABLE `people` (
    `id` INTEGER PRIMARY KEY AUTOINCREMENT,
    `name` TEXT NOT NULL,
    `mail` TEXT,
    `age` INTEGER
);
  1. dbファイルを作成します。
    今回は、こちらにも記載されている
    sqliteで行きます。
$ cd database
$ sqlite3 database/sdatabase.sqlite
  1. マイグレーションを生成
$ php artisan make:migration create_people_table
  1. おそらく、database/migrations/20XX_MM_DD_XXXXX_create_people_table.phpというものが出来上がっています。

その中のupメソッドを以下の様に修正。

public function up()
{
    Schema::create('people', function (Blueprint $table) {
     // ↓ここに必要なカラムや、型を記載してあげる。
        $table->bigIncrements('id')->autoIncrement('id');
        $table->TEXT('name');
        $table->TEXT('mail')->nullable();
        $table->INTEGER('age')->nullable();
        $table->timestamps();
    });
}

この様に、function内に
$table->指定したい型('カラム名');
のような形にしてあげます。

詳細は、ここ

  1. 記載できたら
php artisan migration

すると、テーブルが作成されます。(この時点でデータは空っぽ)

  1. シーダーの作成
    ダミーデータを入れてくれるシーダーを用意します。
$ php artisan make:seeder PeopleTableSeeder

すると、/database/seeds/PeopleTableSeeder.phpというファイルが作成されます。
その中身を以下の様に記載

class PeopleTableSeeder extends Seeder
{
    public function run()
    {
        // 2つ目の引数は作成したい件数。10と書けば、10件作成される。
        $users = factory(App\Person::class, 3)->create();
    }
}

このrun()メソッドの中に、手動でダミーデータを書くこともできますが、
面倒なので、ファクトリーというダミーデータを生成してくれる機能にお願いすることにします。

※現時点で、Personモデルが無ければ

$ php artisan make:model Person

で作成しておく。

  1. ファクトリー作成
$ php artisan make:factory PersonFactory

これで、/database/factories/PersonFactory.phpが作成されます。

このファイルの中身を以下のように記載


// ↓model名を変更
use App\Person;
use Faker\Generator as Faker;
        // ↓model名を変更
$factory->define(Person::class, function (Faker $faker) {
    return [
// ダミーデータを入れたい「 'カラム名' => $faker->ルール名 」 の形で記載
        'name' => $faker->name,
        'mail' => $faker->unique()->safeEmail,
        'age' => $faker->randomNumber(2),
        'created_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()),
        'updated_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()),
    ];
});

$faker->ルール名の形で利用できます。
上記例の場合は、

  • nameカラムに、ダミーの名前データを入れたいので、$faker->name
  • ageには、2桁の数字を入れたいので、$faker->randomNumber(2)

これらどの様なfakerの種類が有るかはこちらに詳しいです。
(まとめありがとうございます!)

  1. /database/seeds/DatabaseSeeder.phpのrunメソッドの中身を以下のように修正
    public function run()
    {
        $this->call(PeopleTableSeeder::class);
    }

runの中の1行を変えて下さい。
今回は、PeopleTableSeederを使うので、上記の様に記載。

  1. 最後に、
$ php artisan db:seed

して、ダミーデータが作成されているかを確認したら終了です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?