1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Laravel]マイグレーション(migration)・シーダー(seeder)まとめ

Last updated at Posted at 2023-12-03

はじめに

今まで学習してきたことを、自分なりにまとめていきます。

マイグレーション(migration)

マイグレーションとは、データベースのテーブル作成や編集などを管理する方法です。
1つのテーブルを作成するのに必要なマイグレーションファイルは1つ必要になります。

①マイグレーションファイルの作成

Laravel Sailで開発環境を構築しているので、下記のようなコマンドを実行し、マイグレーションファイルを作成します。

$ ./vendor/bin/sail php artisan make:migration create_テーブル名(名詞の複数形)_table

Laravel Sailで開発環境を構築した場合は./vendor/bin/sail php artisanとなるので注意してください。

テーブル名のところは作成するテーブル名を複数形で入力してください。

②マイグレーションファイルの構成

Laravelのバージョンによっても異なりますが、デフォルトで下記のマイグレーションファイルが存在します。

  • 2014_10_12_000000_create_users_table.php
  • 2014_10_12_100000_create_password_resets_table.php
  • 2019_08_19_000000_create_failed_jobs_table.php
  • 2019_12_14_000001_create_personal_access_tokens_table.php

これらデフォルトで存在するマイグレーションファイルのほとんどは、ログイン機能を実装する場合などに使用します。

③マイグレーションファイルの記述

マイグレーションファイルを使用してカラムを追加する場合、基本$table->カラムタイプ('カラム名')という形でカラム定義を記述します。

ちなみに利用可能なカラムタイプはドキュメントに一覧が載っているので、参照してみてください。
※バージョンの違い等で利用可能なカラムは変わる場合もあります。

記述例
<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('テーブル名', function (Blueprint $table) {
            $table->id();
            $table->string('title', 100); // ここを追加
            $table->text('content');      // ここを追加
            $table->timestamps();
        });
    }

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

$table->string('title', 100); とすることでtitleというカラム名の100文字という文字数制限があるカラムを生成します。
$table->text('content'); とすることでcontentというカラム名の文字数制限がないカラムを生成します。

④マイグレーションの実行

記述が終わったら、下記コマンドでマイグレーションの実行をしていきましょう。

$ ./vendor/bin/sail php artisan migrate

実行が成功したら、phpMyAdminへアクセスして、データベースにテーブルが作成されていると思います。

補足

未処理のマイグレーションをすべて実行するには、migrate Artisanコマンドを実行します。

./vendor/bin/sail php artisan migrate

データベースからすべてのテーブルを削除したあと、migrateコマンドを実行します。

./vendor/bin/sail php artisan migrate:fresh
./vendor/bin/sail php artisan migrate:fresh --seed

すべてのマイグレーションをロールバックしてから、migrateコマンドを実行します。このコマンドは、データベース全体を効果的に再作成します。

./vendor/bin/sail php artisan migrate:refresh
./vendor/bin/sail php artisan migrate:refresh --seed

シーダー(seeder)

シーダーとは、データベースにテストデータを作成するための機能です。

①シーダーファイルの作成

シーダーファイルもマイグレーションファイル同様、コマンドで作成することができます。
下記コマンドを実行してください。

$ ./vendor/bin/sail php artisan make:seeder テーブル名TableSeeder

テーブル名の1文字目は大文字にしてください。

②シーダーファイルの記述

記述したテーブル名のテーブルへデータを追加する場合、DB::table('テーブル名')->insert([追加するデータ群]);という形でカラム定義を記述します。

記述例
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; // ここを追加

class テーブル名TableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // --- ここから追加 ---
        DB::table('テーブル名')->insert([
            'title' => 'タイトル1',
            'content' => 'テストデータ1',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);

        DB::table('テーブル名')->insert([
            'title' => 'タイトル2',
            'content' => 'テストデータ2',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);

        DB::table('テーブル名')->insert([
            'title' => 'タイトル3',
            'content' => 'テストデータ3',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);
        // --- ここまで追加 ---
    }
}

③シーダーファイルの登録

作成したシーダーファイルは、実行するためにDatabaseSeeder.phpへ登録することが必要です。

登録の仕方は下記の通り編集してください。

database/seeders/DatabaseSeeder.php
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(テーブル名TableSeeder::class); // ここを追加
        // \App\Models\User::factory(10)->create();

        // \App\Models\User::factory()->create([
        //     'name' => 'Test User',
        //     'email' => 'test@example.com',
        // ]);
    }
}

④シーダーファイルの実行

記述が終わったら、下記コマンドでシーダーファイルの実行をしていきましょう。

$ ./vendor/bin/sail php artisan db:seed

実行が成功したら、phpMyAdminへアクセスして、データベースにテストデータが登録されていると思います。

コマンドまとめ

この記事に載せてあるコマンド一覧です。

マイグレーションファイルの作成
$ ./vendor/bin/sail php artisan make:migration create_テーブル名(名詞の複数形)_table
マイグレーションの実行
$ ./vendor/bin/sail php artisan migrate
未処理のマイグレーションをすべて実行
./vendor/bin/sail php artisan migrate
すべてのテーブルを削除したあと、migrateコマンドを実行
./vendor/bin/sail php artisan migrate:fresh
./vendor/bin/sail php artisan migrate:fresh --seed
すべてのマイグレーションをロールバックしてから、migrateコマンドを実行
./vendor/bin/sail php artisan migrate:refresh
./vendor/bin/sail php artisan migrate:refresh --seed
シーダーファイルの作成
$ ./vendor/bin/sail php artisan make:seeder テーブル名TableSeeder
シーダーファイルの実行
$ ./vendor/bin/sail php artisan db:seed

さいごに

いかがだったでしょうか。

他にもいろいろな記事を書いているのでぜひ読んでいただけたら嬉しいです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?