Migration - iruma-tea/laravel-base-11 GitHub Wiki

3. マイグレーションについて

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

  • 書籍のカテゴリ情報を扱うカテゴリテーブルのマイグレーションファイルの作成
    • php artisan make:migration create_categories_table --create=categories
  • 書籍テーブルのマイグレーションファイルの作成
    • php artisan make:migration create_books_table --create=books
  • 下記2つのマイグレーションファイルが作成される
    • database/migrations/(作成日時)_create_categories_table.php
    • database/migrations/(作成日時)_create_books_table.php

3.1.1 categories テーブルのレイアウト

名前 制約など
id BIGINT UNSIGNED AUTO_INCREMENT(自動採番)、主キー
title VARCHAR(100) NOT NULL
created_at TIMESTAMP NOT NULL
updated_at TIMESTAMP NOT NULL

3.1.2 books テーブルのレイアウト

名前 制約など
id BIGINT UNSIGNED AUTO_INCREMENT(自動採番)、主キー
title VARCHAR(100) NOT NULL
author VACHAR(50) NOT NULL
price INT NOT NULL
category_id INT NOT NULL, FOREIGN KEY(categories_id)
created_at TIMESTAMP NOT NULL
updated_at TIMESTAMP NOT NULL

3.1.3 テーブル定義のメソッド

3.1.3.1. テーブル定義の主なメソッド

メソッド 説明 制約など
$table->id() BIGINT UNSIGNED型のid列を作成する PRIMARY KEY, AUTO_INCREMENT
$table->integer('name') INT型のname列を作成する NOT NULL
$table->float('name', 3, 2) 実数型(整数部3桁、小数部2桁)のname列を作成する NOT NULL
$table->foreignId('name_id')->constrained() BIGINT UNSIGNED型のname_id列を作成する FOREING KEY, NOT NULL
$table->boolean('name') BOOLEAN型のname列を作成する NOT NULL
$table->string('name', 100) VARCHAR(100)型のname列を作成する NOT NULL
$table->date('name') DATE型のname列を作成する NOT NULL
$table->timestamp('name') TIMESTAMP型のname列を作成する NOT NULL
$table->timestamp() TIMESTAMP型のcreated_at列、update_at列を作成する

3.1.3.2. インデックス制約

メソッド 説明
index() インデックスを作成する
nullable NULLを許可する
default(value) 引数に指定した値をデフォルト値にする
unique() ユニーク制約を付与する

3.1.3.3. テーブル定義変更時に使う主なメソッド

メソッド 説明
$table->dropColumn('name') name列を削除する
$table->renameColumn('a', 'b') a列をb列に変更する
$table->string('name', 10) VARCHAR(10)型のname列を追加する
$table->string('name', 10)->change() name列のサイズを10に変更する
$table->string('name', 10)->nullable()->change() name列のサイズを10に変更後、NULLの登録を許容する

3.1.4 マイグレートとロールバック

マイグレーションの実行コマンドの一覧

コマンド 内容
php artisan migrate マイグレーションを実行する
php artisan migrate:rollback 最後に実行したマイグレーションをロールバック
php artisan migrate:rollback --step=5 過去5回分のマイグレーションをロールバック
php artisan migrate:reset すべてのマイグレーションをロールバック
php artisan migrate:refresh すべてのマイグレーションをロールバックした上で、再度マイグレーションを実行
php artisan migrate:refresh --seed すべてのマイグレーションをロールバックした上で、再度マイグレーションを実行(シードを投入)

3.1.5 テーブル仕様変更

  • 書籍テーブルの著者列を削除する
    • 仕様変更などで書籍テーブルの定義を変更する場合、新しくマイグレーションファイルを作成する。
      • php artisan make:migration drop_column_author_from_books_table --table=books
  • 著者テーブル、著者詳細テーブルを作成する
    • php artisan make:migration create_authors_table --create=authors
    • php artisan make:migration create_author_details_table --create=author_details
  • 著者書籍テーブルを作成する
    • php artisan make:migration create_author_book_table --create=author_book

3.1.5.1 著者テーブルのレイアウト

名前 制約など
id BIGINT UNSIGNED AUTO_INCREMENT(自動採番)、主キー
name VARCHAR(50) NOT NULL, INDEX
created_at TIMESTAMP NOT NULL
updated_at TIMESTAMP NOT nULL

3.1.5.2 著者詳細テーブルのレイアウト

名前 制約など
author_id BIGINT UNSIGNED NOT NULL, FOREIGN KEY(authors.id), 主キー
email VACHAR(100) UNIQUE
address VACHAR(100)
created_at TIMESTAMP NOT NULL
updated_at TIMESTAMP NOT NULL

3.1.5.3 著者書籍テーブルのレイアウト

名前 制約など
book_id BIGINT UNSIGNED NOT NULL, FOREIGN KEY(books.id), 複合主キー
author_id BIGINT UNSIGNED NOT NULL, FOREIGN KEY(authors.id), 複合主キー
created_at TIMESTAMP NOT NULL
updated_at TIMESTAMP NOT nULL
⚠️ **GitHub.com Fallback** ⚠️