はじめに
以下はLaravelと連携しているデータベースにテーブルを作成する工程のメモになります
テーブルの名称について
テーブル名は一般的に以下のルールに沿って名称付けをされています
※必ず適用しなければならないルールではありません
- スネークケース(
snake_case
)であること - 複数形であること(
users
やorders
など)
マイグレーションファイルの作成
php artisan make:migration create_items_table
コマンドの説明
- php artisan
Laravelのコマンドラインインターフェース(CLI)ツールです。さまざまなLaravelの操作をコマンドで実行できます。 - make:migration
マイグレーションファイルを作成するためのコマンドです。
make はファイルやクラスを作成するためのLaravelの機能
migration はマイグレーションファイルを意味します。 - create_items_table
作成するマイグレーションファイルの名前です。通常、この名前はテーブルの作成や変更を示すために適切な名前をつけます。この場合、「items」テーブルを作成することを示しています。
コマンドの使い方(その他)
- create_新規のテーブル名_table
新しいテーブルの作成する
- add_追加するカラム名_to_既存のテーブル名_table
既存のテーブルにカラムを追加する
- remove_削除したいカラム名_from_対象のテーブル名_table
既存のテーブルからカラムを削除する
- rename_既存のテーブル名_to_新しいテーブル名
テーブル名の変更
マイグレーションファイルの編集方法
データベースの「構造」を定義するためのファイルです。これを使うことで、データベースのテーブルやカラムの作成、変更、削除などを簡単に管理できます
マイグレーションファイルの基本構造
マイグレーションファイルは主に2つのメソッド(関数)で構成されています:
-
up() メソッド
データベースに対して行う変更を定義します。新しいテーブルを作成したり、既存のテーブルにカラムを追加したりする処理を記述します。 -
down() メソッド
up() メソッドで行った変更を取り消すための処理を定義します。たとえば、テーブルを削除する処理などを記述します。
マイグレーションファイルの例
<?php
use Illuminate\Database\Migrations\Migration;
// Migration クラスを利用するために必要な宣言です
use Illuminate\Database\Schema\Blueprint;
// Blueprint クラスを利用するために必要な宣言です。
use Illuminate\Support\Facades\Schema;
// Schema ファサードを利用するために必要な宣言です。
class CreateItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->id();
// 自動的に unsignedBigInteger('id') と primary() を追加
$table->string('name'); // 名前を保存する文字列カラム
$table->integer('quantity'); // 数量を保存する整数カラム
$table->timestamps(); // 作成日と更新日を保存するカラム
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('items'); // items テーブルを削除
}
}
マイグレーションファイル編集時の注意点
一般的にテーブルには一意の値を持つ主キー(Primary Key)
が必要になります。
Laravelでは、id メソッドを使うのが一般的であり、自動的に id
という名前のカラムを主キーとして設定します。
id以外を主キーとして扱いたい場合の例
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateItemsTable extends Migration
{
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->unsignedBigInteger('custom_id'); // 主キーとして使うカラム
$table->string('name');
$table->timestamps();
$table->primary('custom_id'); // 主キーとして指定
});
}
public function down()
{
Schema::dropIfExists('items');
}
}
メソッドの補足
-
unsignedBigInteger メソッド
負の数(マイナスの数)は保存できず、0以上の数字だけが保存でき、
18,446,744,073,709,551,615までの整数値を保存できます -
primary メソッド
テーブルの中で特定のカラムを「主キー」として設定します。
カラムを追加するマイグレーションを作成する
既存のテーブルにカラムを追加する場合は、以下で新しいマイグレーションファイルを作成します
php artisan make:migration add_column_to_table_name --table=table_name
-
add_column_to_table_name
マイグレーションファイルの名前です
カラムを追加する内容を示すような名前にします。 -
--table=table_name
カラムを追加したいテーブルの名前を指定します
テーブルのカラムを作成するためのメソッド一覧
新しいカラムを追加するための例
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddBirthdateToUsersTable extends Migration
{
/**
* マイグレーションの実行
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
// 新しいカラムを追加
$table->date('name');
});
}
/**
* マイグレーションのロールバック
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
// カラムを削除
$table->dropColumn('birthdate');
});
}
}
マイグレーションファイルでは、テーブルの構造を定義するためにさまざまなメソッドを使用できます。
以下は、Laravelのマイグレーションファイルでよく使われるメソッドの例です
string (文字列のカラム)
$table->string('name');
text (長い文字列を保存できるカラム)
$table->text('description');
integer (整数値を保存できるカラム)
$table->integer('age');
unsignedBigInteger (符号なしの大きな整数のカラム)
$table->unsignedBigInteger('user_id');
boolean (真偽値(true または false)を保存できるカラム)
$table->boolean('is_active');
date (日付を保存できるカラム)
$table->date('birthdate');
timestamp (日付と時間を保存できるカラム)
$table->timestamp('created_at');
timestamps (created_at と updated_at の2つのカラムを同時に作成します)
$table->timestamps();
enum (定義した値だけを保存できるカラム)
$table->enum('status', ['pending', 'completed', 'cancelled']);
decimal (小数点を含む数値を保存できるカラム)
$table->decimal('price', 8, 2); // 8桁の数字(小数点以下2桁)
テーブルの変更に関するメソッド一覧
以下は既存のカラム名の変更や削除、テーブルの削除に関するメソッドです
renameColumn (カラムの名前を変更します)
$table->renameColumn('old_name', 'new_name');
dropColumn (既存のカラムを削除します)
$table->dropColumn('column_name');
dropIfExists (テーブルが存在する場合に削除します)
Schema::dropIfExists('table_name');
※テーブルが存在しない場合には何もせずに処理を終了します
外部キー制約の設定をするためのメソッド
外部キーは、あるテーブルのカラム(列)が、別のテーブルのカラム(通常は主キー)を参照するために使用されるキーです。この関係を設定することで、2つのテーブル間に関連性を持たせることができます。
マイグレーションファイルでの外部キー設定例
orders テーブル
が customers テーブル
の id カラム
を参照する場合、マイグレーションファイルで外部キーを設定する方法は次のようになります。
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateOrdersTable extends Migration
{
public function up()
{
Schema::create('orders', function (Blueprint $table) {
$table->id(); // 主キー
$table->unsignedBigInteger('customer_id'); // 外部キーを設定するカラム
$table->foreign('customer_id') // 外部キー制約の設定
->references('id') // 参照先のテーブルのカラム
->on('customers'); // 参照先のテーブル名
$table->timestamps(); // 作成日時と更新日時
});
}
public function down()
{
Schema::dropIfExists('orders');
}
}
外部キー設定についての補足
-
unsignedBigInteger
外部キーのカラムは、通常、参照先のテーブルの主キーと同じ型にする必要があります。unsignedBigInteger は、一般的に id カラムに使用されます。 -
foreign メソッド
: 外部キー制約を設定するために使用します。このメソッドで、参照先のテーブルとカラムを指定します -
references メソッド
どのカラムを参照するかを指定します。 -
on メソッド
参照先のテーブル名を指定します。
マイグレーションを適用するコマンド
マイグレーションファイルをデータベースに適用するには、以下のコマンドを実行します。
php artisan migrate
※実行前にはデータベースとの接続が必要です
マイグレーションの実行後の適用確認
MySQL Workbenchなどを使用して事前に確認できるように接続しておくと便利です
コマンド実行時にエラーが発生する場合は、マイグレーションファイルのコードに誤りがあるか、すでにテーブルが存在するなどが考えられます