8_Laravel10_データーベース_マイグレーション

LaravelはDBのテーブル定義の管理もプロジェクト上で行う。
テーブル定義を記述するファイルをマイグレーションファイル、定義をデータベースに反映する作業をマイグレートと呼ぶ

#sail artisan make:migration マイグレファイル名 --create=テーブル名
sail artisan make:migration create_books_table --create=books

database/migrations/2023_08_06_164637_create_books_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('books', function (Blueprint $table) {
   //BIGINT UNSIGNED、AUTO_INCREMENT 主キー
   $table->id();
   //VARCHAR(100)、NOT NULL
   $table->string('title',100);
   //VARCHAR(50)、NOT NULL
   $table->string('author',50);
   //INT、NOT NULL
   $table->integer('price');
   //INT、NOT NULL、FOREIGN KEY(category_id)
   //categorysテーブルのid※sはついていない単数形になっている
   $table->foreignId('category_id')->constrained();
   //created_at、TIMESTAMP、NOT NULL
   //updated_at、TIMESTAMP、NOT NULL
   $table->timestamps();
  });
 }

 /**
 * Reverse the migrations.
 */
 //マイグレ取消時(ロールバック時)に呼び出される
 //upメソッドの内容を打消す処理を書く
 public function down(): void
 {
  //booksのテーブルが存在する時削除する
  Schema::dropIfExists('books');
 }
};

INT型のname列を作成する
NOT NULL
$table->integer(‘name’);

実数型(整数部3桁、小数部2桁)のname列を作成する
NOT NULL
$table->float(‘name’,3,2);

BOOLEAN型のname列を作成
NOT NULL
$table->boolean(‘name’);

DATE型のname列を作成する
NOT NULL
$table->date(‘name’);

TIMESTAMPS型のname列作成する
$table->timestamps(‘name’);

TIMESTAMPS型のcreated_at列とupdated_at列を作成する
$table->timestamps();

name_idを主キーにする
$table->primary(‘name_id’);

複合キーにする
テーブル名のsを取って_id
$table->primary([‘book_id’,’author_id’]);

制約を付与する場合

index() インデックスを作成する
例:$table->string(‘name’,50)->index();

nullable() NULLを許可する
例:$table->string(‘email’,100)->nullable()->unuque();

default(value) 引数に指定した値をデフォルト値にする
例:

unique() ユニーク制約を付与する
例:$table->string(‘email’,100)->nullable()->unuque();

マイグレート

マイグレファイルの定義をもとにデータベースのテーブル作成

sail artisan migrate

確認
mysqlに接続

sail mysql
desc books

down()メソッド

Schema::dropIfExists(‘books’);はbooksのテーブルが存在する時に削除する
ロールバックの対象になるのは直前のマイグレートで使用されたファイルのみ
対象ファイルの確認はmigrationsテーブルを見てbatch列の番号が一番大きいものが対象となる

sail mysql
select * from migrations;

ロールバックを実行
テーブルが削除される

sail artisan migrate:rollback

確認
エラーがでればOK

sail mysql
desc books;

テーブルをすべて削除したい場合

sail artisan migrate:reset

テーブル定義を変更したい場合

テーブル定義を変更したい場合、新しくマイグレーションファイルを作成する
オプションが「–table」になっている
ファイル名は「どのテーブル」にたいして「どんな操作」を行こなったのかファイル名からわかるようにする

sail artisan make:migration drop_column_author_from_books_table --table=books

テーブル定義変更時に使う主なメソッド
$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の登録を許容する

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
* テーブル定義を変更する場合マイグレファイルを新規に作成する
* コマンド
* sail artisan make:migration drop_column_author_from_books_table --table=books
*/
public function up(): void
{
// 「Schema::table」が「create」でなく「table」になっている
Schema::table('books', function (Blueprint $table) {
// 著者列を削除する処理
$table->dropColumn('author');
});
}

/**
* Reverse the migrations.
*/
//マイグレ取消時(ロールバック時)に呼び出される
//upメソッドの内容を打消す処理を書く
public function down(): void
{
Schema::table('books', function (Blueprint $table) {
// 著者列を追加する処理
$table->string('author',50);
});
}
};
Author: gaa

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です