
今回からはCRUDの機能を実装していきます。まずはじめに、一覧画面の作成から始めたいと思います。一覧表示に必要なデータの作成する為にMigrationしてtableを作る → Factoryを使ってseedingするところまでを、このページでは行います。
Migrationファイルを作成する
まずは、テーブルを作成する為のmigrationファイルの作成を行います。以下のartisanのコマンドを実行してmigrationファイルを作成します。
今回は、projectsテーブル作成します。テーブル名自体はモデルの複数形にするのが基本ルールになります。今回だとprojectモデルに対応するprojectsテーブルを作るという感じです。例えば、projectMemberというモデルを作る場合は、対応するのはproject_membersテーブルという感じでスネークケースをテーブル名に使用することになります。ここら辺は規約に則ると勝手にモデルとテーブルを紐付けてくれるというだけで、自分でモデルに紐付くテーブル名を指定することもできます。
php artisan make:migration create_projects_table
実行すると以下のファイルが作成されます。今回は適当にname(プロジェクト名)とdescription(説明)というカラムをテーブルに追加してみました。idとtimestampsは、そのまま使います。
database/migrations/2024_12_09_121808_create_projects_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('projects', function (Blueprint $table) {
$table->id();
$table->string('name', length: 50); // 追加
$table->string('description', length: 250); // 追加
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('projects');
}
};
ここまで準備ができたら、以下のコマンドを実行してmigrationを行います。
php artisan migrate
DBの中を念のため確認してみるとテーブルができてますね。

ちなみに、以下のコマンドを実行するとmigrationの状態が確認できます。
php artisan migrate:status
緑色でRanと記載されているのが実行済みのファイルになります。Ranの横の数字は、Step数です。前回実行したファイルは1となっており、今回のが2となっております。rollbackしたい時に何step前まで戻すか指定できるので、そういう時に使いますが、今回は試しません。

ModelとFactoryを作成する
テーブルが出来たので、続けて、以下のコマンドを実行してModelとFactoryを作成します。-fのオプションを指定することで、Modelと一緒にFactoryを作成しています。
php artisan make:model Project -f
app/Models/Project.php
今回は変更しません。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
/** @use HasFactory<\Database\Factories\ProjectFactory> */
use HasFactory;
}
database/factories/ProjectFactory.php
Laravelに標準で備わっているfackerというライブラリーを使用して、テスト用のデータを自動生成するようにします。
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Project>
*/
class ProjectFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->text(50), // 追加
'description' => fake()->text(250), // 追加
];
}
}
最後に、DatabaseSeeder.phpを修正してseedingを実行してテストデータを作成できるようにします。今回は、20件のデータを作成する為に、countの引数に20を指定しています。
database/seeders/DatabaseSeeder.php
<?php
namespace Database\Seeders;
use App\Models\Project;
use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
Project::factory()->count(20)->create(); // 追加
}
}
以下のコマンドを実行してテストデータを作成します。
php artisan db:seed
たんまりと20件分のデータが作成されました。
