【Laravel8】DB周りの解説(テーブル作成、データ投入、データ検索等)- テストデータ投入編 (初級レベル)

2021年10月6日

はじめに

このページではLaravelコマンドを使ったテストデータ挿入方法について解説します。

LaravelではPHPのFakerクラスというダミーデータを大量に作るのに便利なライブラリが使えます。
今回はFakerクラスを使ったテストデータの挿入方法について解説します。

聞き慣れない単語がたくさん出てくるかもしれませんが、難しくはありません。
うまくいかない時はスペルミスなど単純ミスをしていないか確認してください。

Fakerクラスについてはライブラリのサイトも見てみてください。
https://fakerphp.github.io/

関連記事はこちら

LaravelでのDB接続については→ https://karaagelovers.com/laravel-table-creation/
Laravelでのスキーマー作成については→ https://karaagelovers.com/create-mysql-table-with-laravel-commands/
Laravelでのマスターデータ投入については→ https://karaagelovers.com/insert-table-record-with-laravel-commands/

概要

Fakerクラスを使って生成されるダミーデータを指定した個数生成するコードを書き、
コマンドを実行しmysqlにデータを挿入します。

大まかな流れはこちら

  1. ダミーデータの形式を定義
  2. 定義したダミーデータの内容を呼び出しDBに挿入

手順

では実際の方法を見ていきましょう。

ModelとSeederクラスはすでに作成している前提で進めます。
まだの人は過去記事を参考に作成してから本記事の作業をしましょう。

毎度お馴染みスキーマー情報です。
今回もこのスキーマーを使います。

テーブル名 members

FieldTypeNullKeyDefaultExtra
idbigint unsigned NOPRINULLauto_increment
usernamevarchar(255)NONULL
emailvarchar(255)NONULL
email_verified_attimestampYESNULL
created_attimestampYESNULL
updated_attimestampYES>NULL


さて手順の解説に移ります。

まずは

ダミーデータの形式を定義する

やり方はFactoryクラスにダミーデータのフォーマットを書きます。


Factoryクラスを作成する前に、

Fakerクラスで生成される文字列を日本語でも使えるように設定ファイルの変更をします。

ファイル名 config/app.php

109行目を編集します。

faker_locale’ => 'ja_JP’,

これでダミーデータ生成時に日本語も使えます。


ではFactory(ファクトリー)クラスを作りましょう

↓以下コマンドを実行します。


php artisan make:factory MemberFactory


できたファイルを早速編集します。

ファイル名 database/factories/MemberFactory.php

↓↓編集箇所

5行目 モデルクラスを呼びます。
use App\Models\Member;

15行目 使うモデルクラスを定義します。
protected $model = \App\Models\Member::class;

22行目 生成するダミーデータの定義をします。

return[
] の中に定義を書きます。

例)

    return [
        'username' => $this->faker->kanaName(),
        'email' => $this->faker->unique()->safeEmail(),
        'email_verified_at' => now(),
    ];



その他使えるデータ種類についてはこちらもご確認ください。
使えるダミーデータの種類については
https://fakerphp.github.io/formatters/

日本語文字列については
https://fakerphp.github.io/locales/ja_JP/

これでダミーデータの定義は完了。

次は、

定義したダミーデータの内容を呼び出しDBに挿入するコードを書く



こちらのファイルを編集します。
ファイル名 database/seeders/MemberSeeder.php

↓↓編集箇所

6行目 Modelクラスを宣言します。

use App\Models\Member

18行目 先ほど作ったダミーデータ作成の定義を呼び、何個データを作るか指定します。

\App\Models\Member::factory()->count(15)->create();



★★★必要であれば★★★

もしDatabaseSeeder.phpでMemberSeeder.phpを呼ぶ設定がまだであれば、
追記してください

編集ファイル名
database/seeders/DatabaseSeeder.php

↓↓編集箇所

18行目から20行目あたりにこれを追加してください。

    $this->call([
        MemberSeeder::class,
    ])


設定が終わったらコマンド実行します。

↓コマンド実行

php artisan db:seed

ログ          

Seeding: Database\Seeders\MemberSeeder

Seeded:  Database\Seeders\MemberSeeder (48.45ms)

Database seeding completed successfully.

コマンド実行したらDBの中身を見てみましょう

無事指定したフォーマットでダミーデータが入っていました。
メアドも日本名っぽいですね。
設定ファイルで設定した値が生きているのでしょうか。

↓↓コマンド実行結果

以上です。
次回は登録した値を検索する方法について解説します。

Posted by karaagelovers