Laravelのモデルの作成と使い方は定形が決まっているのでその他のフレームワークと比べても比較的覚えやすいです。
Laravel 8.x マイグレーション
データベーステーブルの状態をSQLではなくLaravelのフレームワーク内で管理しようとする思想なので、可能な限りLaravelで操作した方がベストですが、私的にはどうしてもSQL文で書いた方がわかりやすいっていうのはあります。ですが、migrationではMVCを一気通貫で作ってしまう方法とかもあるのでやはり便利です。
マイグレーションファイルはapp/database/migrations
以下に生成されます。認証/認可の設定はDBセッションでの設定でいくつかのテーブルを作成するためのファイルがすでにあったりします。DBにテーブルをまだ作成していないときはまだ何もありません。
ここではsampleテーブルを作成してみます。Laravelの習慣に従って以下のコマンドを実行します。
$ php artisan make:migration create_samples_table
新規でテーブルを作成する場合は、create_で始めるのが習慣になっています。app/database/migrations/2021_08_05_092950_create_samples_table.php
が作成されます。これでマイグレーション実行時(テーブル作成時)のマイグレーションファイルが作成されます。デフォルトでは、idとtimestampのカラムが自動的に作成されるようなコードが生成されています。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateSampleTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sample', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('sample');
}
}
このファイルに必要なカラムの追加、必要なカラムの定義をして、テーブルの生成をします。
ここではテストカラムを2つ3つ作成してみることにします。こういったかたちにしてみます。
public function up()
{
Schema::create('sample', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('remark');
$table->timestamps();
});
}
マイグレーションしてみます。
$ php artisan migrate
(./vendor/bin/sail artisan migrate)
マイグレーションが正しく実行されました。
Migrating: 2014_10_12_200000_add_two_factor_columns_to_users_table
Migrated: 2014_10_12_200000_add_two_factor_columns_to_users_table (232.02ms)
Migrating: 2021_08_05_090208_create_flights_table
Migrated: 2021_08_05_090208_create_flights_table (22.49ms)
Migrating: 2021_08_05_092950_create_samples_table
Migrated: 2021_08_05_092950_create_samples_table (25.06ms) ←これ
phpmyadminやコマンドラインで正しくテーブルが作成されたか確認しましょう。
マイグレーションが実行されるとテーブルが作成されて、migrationsテーブルに実行結果が一行追加されます。
マイグレーションファイルを作成するときは、どっちにしろモデルファイルも必要ということで、
$ php artisan make:model Sample --migration
こんな風に同時に作ることができます。こっちの方が便利です。
Laravelは習慣として、マイグレーションファイルは複数形、モデルファイルは単数形ということになっていて上記のコマンドでもそういうファイル名に自動的に命名されます。
app/Models/Sample.php
database/migrations/2021_08_05_164123_create_samples_table.php
ここでも同様にマイグレーションファイルを修正してからphp artisan migrate
を実行してテーブルを作成します。たいていの場合モデルファイルはそのまま使えます。