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);
});
}
};