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が生成されているか確認してみます。

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のプロパティは下記が参考になります。
ファイルが完成したら、保存します。
生成されるデータ

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