目次
Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方
Laravelバージョン
動作確認はLaravel Framework 7.19.1で行っています
前提条件
eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています
Laravelでデータベースを扱う準備をする
本記事は上記が完了している前提で書かれています
上記記事で作成したデータベースを使っていきます
マイグレーション生成
コマンドラインで
sample
php artisan make:migration table1
php artisan make:migration table2
php artisan make:migration table3
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/database/migrations/xxxx_xx_xx_xxxxxx_table1.phpが現れます
/sample/database/migrations/xxxx_xx_xx_xxxxxx_table2.phpが現れます
/sample/database/migrations/xxxx_xx_xx_xxxxxx_table3.phpが現れます
作成されたファイルの接頭辞がタイムスタンプになっているのは、マイグレーションの実行順をフレームワークに知らせるためです
マイグレーション修正
(1) /sample/database/migrations/xxxx_xx_xx_xxxxxx_table1.phpを下記に修正
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Table1 extends Migration
{
public function up()
{
Schema::create('table1', function (Blueprint $table) {
$table->id()->autoIncrement();
$table->string('varchar_col', 255)->nullable()->default(null);
$table->integer('int_col')->nullable()->default(null);
$table->dateTime('datetime_col')->nullable()->default(null);
$table->date('date_col')->nullable()->default(null);
$table->time('time_col')->nullable()->default(null);
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_bin';
});
}
public function down()
{
Schema::dropIfExists('table1');
}
}
(2) /sample/database/migrations/xxxx_xx_xx_xxxxxx_table2.phpを下記に修正
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Table2 extends Migration
{
public function up()
{
Schema::create('table2', function (Blueprint $table) {
$table->id()->autoIncrement();
$table->unsignedBigInteger('table1_id')->nullable()->default(null);
$table->string('varchar_col', 255)->nullable()->default(null);
$table->integer('int_col')->nullable()->default(null);
$table->dateTime('datetime_col')->nullable()->default(null);
$table->date('date_col')->nullable()->default(null);
$table->time('time_col')->nullable()->default(null);
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_bin';
});
}
public function down()
{
Schema::dropIfExists('table2');
}
}
(3) /sample/database/migrations/xxxx_xx_xx_xxxxxx_table3.phpを下記に修正
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Table3 extends Migration
{
public function up()
{
Schema::create('table3', function (Blueprint $table) {
$table->id()->autoIncrement();
$table->unsignedBigInteger('table2_id')->nullable()->default(null);
$table->string('varchar_col', 255)->nullable()->default(null);
$table->integer('int_col')->nullable()->default(null);
$table->dateTime('datetime_col')->nullable()->default(null);
$table->date('date_col')->nullable()->default(null);
$table->time('time_col')->nullable()->default(null);
$table->dateTime('create_datetime')->nullable()->default(null);
$table->dateTime('update_datetime')->nullable()->default(null);
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_bin';
});
}
public function down()
{
Schema::dropIfExists('table3');
}
}
upメソッドに書かれたのはマイグレーションを実行するときのコードです。テーブルを作成しています
downメソッドに書かれたのはマイグレーションをロールバックするときコードです。テーブルを削除しています
Schema::createでcreate tableになります
Schema::createの第二引数に与えているクロージャでカラムを作成しています
$table->integer
はinteger型のカラムを作成し、$table->string
はvarchar型のカラムを作成します
作成できるカラムは下記で確認できます
Laravel 7.x データベース:マイグレーション カラム
nullable()はカラムにnullを許容させています
default()はカラムのデフォルト値を設定します
他にもいろいろカラムに設定できます。下記で確認できます
Laravel 7.x データベース:マイグレーション カラム修飾子
マイグレーション実行
コマンドラインで
php artisan migrate
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
/sample/database/migrationsに格納されているマイグレーションクラスのupメソッドが実行されていきます
/sample/database/migrationsにはもともとusersとfailed_jobsが入っていると思います
そこに今回作成したファイル3つの合計5ファイルが実行されたはずです
確認
MySQLでlaravel_sampleデータベースを確認してみましょう
show tables;
+--------------------------+
| Tables_in_laravel_sample |
+--------------------------+
| failed_jobs |
| migrations |
| table1 |
| table2 |
| table3 |
| users |
+--------------------------+
6 rows in set (0.001 sec)
テーブルが作成されたことを確認できました