第10回 Laravel10 環境構築メモ(migrationしてtableを作る&Factoryを使ってseedingをする)
はじめに
前回は、Dockerコンテナの一般ユーザーの作り方の回で話が少しそれたのですが、今回から、何かしらのCRUDを簡単に作りながら、開発の基本を思い出そうという回になります。まずは、テーブル作成してデータを投入しないと始まらないので、migrateとseedingを使ってテーブルの作成とデータの投入をます。第10回まで来ました。特に何回目まででどこまで進めたいというのは全くないです。
Migrationファイルを作成
まずは、テーブルを作成する為のmigrationファイルの作成です。artisanのコマンドを実行します。
php artisan make:migration create_greetings_table
INFO Migration [database/migrations/2023_12_02_140903_create_greetings_table.php] created successfully.
実行後に以下のファイルが作成されます。
database/migrations/2023_12_02_140903_create_greetings_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('greetings', function (Blueprint $table) {
$table->id();
$table->string('country');
$table->string('message');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('greetings');
}
};
今回は、Greetings(挨拶)というtableを作成して、country(国名)とmessage(メッセージ)というカラムを追加してみました。
ちなみに、下記のコマンドを実行すると、
php artisan migrate:status
migrationファイルのステータスが確認できます。先ほど、作成された2023_12_02_140903_create_greetings_tableは、まだ、migrationの実行はしていないので、Pendingとなっています。ほかのファイルについては、すでに、第2回で実行済みの為、Ranという状態になっています。
Migration name ................................................................................ Batch / Status
2014_10_12_000000_create_users_table ................................................................. [1] Ran
2014_10_12_100000_create_password_reset_tokens_table ................................................. [1] Ran
2019_08_19_000000_create_failed_jobs_table ........................................................... [1] Ran
2019_12_14_000001_create_personal_access_tokens_table ................................................ [1] Ran
2023_12_02_140903_create_greetings_table ............................................................. Pending
migrateの実行
ステータスを確認したので、次にmigrateを実行してみます。
php artisan migrate
INFO Running migrations.
2023_12_02_140903_create_greetings_table .......................................................................... 35ms DONE
DBブラウザで確認するとgreetingsというtableが作成されてますね。
念のため、statusを確認するために、先ほどのphp artisan migrate:statusを実行すると、下記の通り、2023_12_02_140903_create_greetings_tableもRanの状態になっています。ちなみに、Ranの横の数字は、php artisan migrateを実行すると繰り上がります。この数字は、Rollbackしたい時にbatchの数字を指定して、そこまで元に戻したりするのに使いますが、今日は、使いません。
2014_10_12_000000_create_users_table ................................................................................ [1] Ran
2014_10_12_100000_create_password_reset_tokens_table ................................................................ [1] Ran
2019_08_19_000000_create_failed_jobs_table .......................................................................... [1] Ran
2019_12_14_000001_create_personal_access_tokens_table ............................................................... [1] Ran
2023_12_02_140903_create_greetings_table ............................................................................ [2] Ran
ModelとFactoryの作成
テーブルが出来たので、続けて、ModelとFactoryを作成します。-fのオプションを指定することで、Modelと一緒にFactoryも作成してくれます。(オプションは他にもあるので、興味のある人は調べてみてください)
php artisan make:model Greeting -f
INFO Model [app/Models/Greeting.php] created successfully.
INFO Factory [database/factories/GreetingFactory.php] created successfully.
上記のコマンドを実行するとファイルが2つ作成されます。
app/Models/Greeting.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Greeting extends Model
{
use HasFactory;
}
app/Models/Greeting.phpは、今回は、何も修正しません。
database/factories/GreetingFactory.php
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Greeting>
*/
class GreetingFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->country(),
'message' => fake()->text(200),
];
}
}
は、Laravelに標準で備わっているfackerというライブラリーを使用して、テスト用のデータを自動生成するようにします。ちなみに、config/app.phpの'faker_locale'を 'ja_JP'に指定すると日本語のデータも自動生成される様です。(が、私はどっちでも良いので英語のままで使ってます)
最後に、DatabaseSeeder.phpを修正してseedingでテストデータを作成できるようにします。今回は、20件のデータを作成しています。
database/seeders/DatabaseSeeder.php
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use App\Models\Greeting;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
Greeting::factory()->count(20)->create();
}
}
ここまでで、準備が整ったので、seedのコマンドを実行してみます。
php artisan db:seed
INFO Seeding database.
それでは、データベースの中身を確認してみます。ちゃんと20件のデータが作成されていました。
この記事が気に入ったらサポートをしてみませんか?