[Laravel] MySQLのテーブル作成とテストデーター自動生成

LaravelでMySQLに接続し、テーブルを作成。そしてシーダーという仕組みを使って自動的にテストデータを入力してみます。プログラムの学習のときはテストデータが必要となる場合が多いので、この機能を習得しておくと今後のプログラム開発に役立ちます。

envファイルにMySQL接続データを登録

Laravelのプロジェクトルートの.envファイルにMySQLの接続情報を設定します。

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:cLc3AoXP7geasZQqFai40s39AagW0pK1jbYRNoQ=
APP_DEBUG=true
APP_URL=http://example.com

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=xxx.xxx.xxx.xxx
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=sample
DB_PASSWORD=xxxxxxxxxx

変更するのは
DB_CONNECTION → mysql
DB_HOST → サーバーのIPアドレス
DB_DATABASE → 任意のDB名
DB_USERNAME → 任意のMySQLユーザー名
DB_PASSWORD → 任意のパスワード
になります。

tableの作成

artisan make:migrationでtableを作成します。
テーブル名は「members」とします。

php artisan make:migration create_members_table

create_テーブル名(複数名)_tableという記述になります。

コンソールに「Created Migration: 2020_04_12_062956_create_members_table」という形式のメッセージが出ます。

プロジェクトのdatabase > migrationsの中にファイルが生成されているのでこれを開いて編集します。

ファイルパス「 /database/migrations/2020_04_12_062956_create_members_table」

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateMembersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string('name'); //追加
            $table->string('email'); //追加
            $table->string('tel'); //追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('members');
    }
}

以下のようなメッセージが出力されます。
Migrating: 2020_04_12_062956_create_members_table
Migrated: 2020_04_12_062956_create_members_table (0.01 seconds)
これで成功しています。

phpMyAdminでtableが生成されているか確認してみます。
2020-04-12_15h41_22

membersテーブルが作られ、指定したカラムも作られています。

Modelの作成

artisanを使ってモデルを作成します。
Laravelのプロジェクトディレクトリで以下のコマンドを実行します。

# php artisan make:model Member

Laravelではテーブル名は複数形、Modelは単数形になっています。
membersテーブルなのでモデルはMemberとなります。
実行すると「Model created successfully.」という緑のメッセージが表示されます。

プロジェクトディレクトリのappの中にMmber.phpというモデルファイルが作られます。

シーダー

シーダーとはサンプルデーターを自動に生成する仕組みです。レコード数の多いデーター、テーブルが多いシステムなどではサンプルデータを作るだけでも大変です。シーダーを使うと簡単にサンプルデータが作れてしまうので便利です。このような機能があるのもフレームワークの良いところです。

シーダーファイルを作るには以下のコマンドを実行します。

# php artisan make:seeder MembersTableSeeder

こちらはMembersと複数形になっていることに注意しましょう。
実行すると「Model created successfully.」という緑のメッセージが表示されます。

database > seedsにファイルが生成されています。
「MembersTableSeeder.php」というファイルが作られていました。

以下のように記載します。

<?php

use Illuminate\Database\Seeder;

class MembersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('members')->delete();
        $faker = Faker\Factory::create('ja_JP');
        for ($i = 0; $i < 10; $i++) {
            \App\Member::create([
                'name' => $faker->name(),
                'email' => $faker->email(),
                'tel' => $faker->phoneNumber()
            ]);
        }
    }
}

function run()の中身は空になっています。

DB::table(‘members’)->delete(); → データを消去
$faker = Faker\Factory::create(‘ja_JP’); → 日本語の設定
for文で10回の繰り返し(10件のデータを登録)
それぞれのフィールドに自動生成する値を設定。
$faker ->name(); の形式で入力する。

fakerのプロパティは下記が参考になります。

[Laravel5.1]Fakerチートシート

ファイルが完成したら、保存します。

生成されるデータ

2020-04-12_16h12_02
かなり現実的なデーターが生成されます。
メールアドレスとか電話番号は適当に作っているのだろうけれど、実在しているデータと一致してしまうこともありそうな・・・一応ボカしておきました(笑)
この機能は便利ですね。今まではある程度のパターンのテストデータを用意していましたが、もう用意する必要無しという感じです。

コマンドのまとめ

テーブルの作成からシーダーの実行までの一連のコマンドをまとめておきます。

# php artisan make:migration create_members_table
# php arisan migrate
# php artisan make:model Member
# php artisan make:seeder MembersTableSeeder
# php artisan db:seed --class=MembersTableSeeder


Author: webmaster