はじめに
今まで学習してきたことを、自分なりにまとめていきます。
マイグレーション(migration)
マイグレーションとは、データベースのテーブル作成や編集などを管理する方法です。
1つのテーブルを作成するのに必要なマイグレーションファイルは1つ必要になります。
①マイグレーションファイルの作成
Laravel Sailで開発環境を構築しているので、下記のようなコマンドを実行し、マイグレーションファイルを作成します。
$ ./vendor/bin/sail php artisan make:migration create_テーブル名(名詞の複数形)_table
Laravel Sailで開発環境を構築した場合は./vendor/bin/sail php artisanとなるので注意してください。
テーブル名のところは作成するテーブル名を複数形で入力してください。
②マイグレーションファイルの構成
Laravelのバージョンによっても異なりますが、デフォルトで下記のマイグレーションファイルが存在します。
- 2014_10_12_000000_create_users_table.php
- 2014_10_12_100000_create_password_resets_table.php
- 2019_08_19_000000_create_failed_jobs_table.php
- 2019_12_14_000001_create_personal_access_tokens_table.php
これらデフォルトで存在するマイグレーションファイルのほとんどは、ログイン機能を実装する場合などに使用します。
③マイグレーションファイルの記述
マイグレーションファイルを使用してカラムを追加する場合、基本$table->カラムタイプ('カラム名')という形でカラム定義を記述します。
ちなみに利用可能なカラムタイプはドキュメントに一覧が載っているので、参照してみてください。
※バージョンの違い等で利用可能なカラムは変わる場合もあります。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('テーブル名', function (Blueprint $table) {
$table->id();
$table->string('title', 100); // ここを追加
$table->text('content'); // ここを追加
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('articles');
}
};
$table->string('title', 100); とすることでtitleというカラム名の100文字という文字数制限があるカラムを生成します。
$table->text('content'); とすることでcontentというカラム名の文字数制限がないカラムを生成します。
④マイグレーションの実行
記述が終わったら、下記コマンドでマイグレーションの実行をしていきましょう。
$ ./vendor/bin/sail php artisan migrate
実行が成功したら、phpMyAdminへアクセスして、データベースにテーブルが作成されていると思います。
補足
未処理のマイグレーションをすべて実行するには、migrate Artisanコマンドを実行します。
./vendor/bin/sail php artisan migrate
データベースからすべてのテーブルを削除したあと、migrateコマンドを実行します。
./vendor/bin/sail php artisan migrate:fresh
./vendor/bin/sail php artisan migrate:fresh --seed
すべてのマイグレーションをロールバックしてから、migrateコマンドを実行します。このコマンドは、データベース全体を効果的に再作成します。
./vendor/bin/sail php artisan migrate:refresh
./vendor/bin/sail php artisan migrate:refresh --seed
シーダー(seeder)
シーダーとは、データベースにテストデータを作成するための機能です。
①シーダーファイルの作成
シーダーファイルもマイグレーションファイル同様、コマンドで作成することができます。
下記コマンドを実行してください。
$ ./vendor/bin/sail php artisan make:seeder テーブル名TableSeeder
テーブル名の1文字目は大文字にしてください。
②シーダーファイルの記述
記述したテーブル名のテーブルへデータを追加する場合、DB::table('テーブル名')->insert([追加するデータ群]);という形でカラム定義を記述します。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; // ここを追加
class テーブル名TableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// --- ここから追加 ---
DB::table('テーブル名')->insert([
'title' => 'タイトル1',
'content' => 'テストデータ1',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
DB::table('テーブル名')->insert([
'title' => 'タイトル2',
'content' => 'テストデータ2',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
DB::table('テーブル名')->insert([
'title' => 'タイトル3',
'content' => 'テストデータ3',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
// --- ここまで追加 ---
}
}
③シーダーファイルの登録
作成したシーダーファイルは、実行するためにDatabaseSeeder.phpへ登録することが必要です。
登録の仕方は下記の通り編集してください。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(テーブル名TableSeeder::class); // ここを追加
// \App\Models\User::factory(10)->create();
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
}
}
④シーダーファイルの実行
記述が終わったら、下記コマンドでシーダーファイルの実行をしていきましょう。
$ ./vendor/bin/sail php artisan db:seed
実行が成功したら、phpMyAdminへアクセスして、データベースにテストデータが登録されていると思います。
コマンドまとめ
この記事に載せてあるコマンド一覧です。
$ ./vendor/bin/sail php artisan make:migration create_テーブル名(名詞の複数形)_table
$ ./vendor/bin/sail php artisan migrate
./vendor/bin/sail php artisan migrate
./vendor/bin/sail php artisan migrate:fresh
./vendor/bin/sail php artisan migrate:fresh --seed
./vendor/bin/sail php artisan migrate:refresh
./vendor/bin/sail php artisan migrate:refresh --seed
$ ./vendor/bin/sail php artisan make:seeder テーブル名TableSeeder
$ ./vendor/bin/sail php artisan db:seed
さいごに
いかがだったでしょうか。
他にもいろいろな記事を書いているのでぜひ読んでいただけたら嬉しいです。