第1回 Laravel11でCRUD(一覧用のデータを作るの巻)

Laravel
Kiaomoto
Kiaomoto

今回からは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件分のデータが作成されました。

タイトルとURLをコピーしました