ここでは投稿されたコメントの内容を格納する comments テーブルを作成します.なお,テーブル名は小文字の複数形で指定することに注意してください.Laravel ではテーブルの作成や変更,ロールバックなどのデータベースの操作をマイグレーションファイルを通じて行います.まずは,comments テーブルを作成するために,マイグレーションファイルを生成します.マイグレーションファイルの生成には php artisan
コマンドを使用します.次のコマンドによって database/migrations/ ディレクトリ内にコマンドを実行した日時から始まるファイルが生成されます.
vagrant@ubuntu2204 comment_app $ pwd ⏎ /home/vagrant/Documents/laravel/comment_app vagrant@ubuntu2204 comment_app $ php artisan make:migration create_comments_table --create=comments ⏎ INFO Migration [database/migrations/2023_10_15_115031_create_comments_table.php] created successfully. vagrant@ubuntu2204 comment_app $
上の作業によってリモート (ubuntu) のプロジェクト内にファイルが生成されました.しかしながら,ローカルのクライアント PC にはまだそのファイルが存在しません.リモートでファイルを操作した後には,次の通り Visual Studio Code でファイル同期を手動で実行するようにしてください.
Visual Studio Code で database/migration フォルダを開きます.まだ,生成されたマイグレーションファイルがローカルに存在しないことを確認します.
ショートカットキー Ctrl + Shift + P (mac は⌘ + shift + P)でコマンドパレットを起動します.「SFTP」と入力して検索して(あるいは,最近使用した一覧から探して),「SFTP: Sync Remote -> Local」を選んで同期します.
ローカルの database/migration フォルダにファイルが同期されたことを確認して開きます.
生成されたファイルは次のような内容になっているはずです.
database/migrations/yyyy_mm_dd_hhmmss_create_comments_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('comments', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('comments');
}
};
生成されたマイグレーションファイルを修正します.次の通り,up 関数に comments テーブルの構造を指定します.主キーとなる id フィールドは id()
によって生成でき,自動的に番号が付与されます.title フィールドはコメントのタイトルを255文字以内で記録し,本文は body フィールドに格納します.また最初の投稿日時と最終更新日時を記録するための created_at フィールドと updated_at フィールドは timestamps()
によって生成できます.
database/migrations/yyyy_mm_dd_hhmmss_create_comments_table.php
public function up(): void
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->string('title', 255);
$table->text('body');
$table->timestamps();
});
}
データベースにテーブルを作成するには php artisan migrate
コマンドを実行します.このコマンドによって database/migrations/ ディレクトリにあるマイグレーションファイルの中から,まだ実行されていないマイグレーションファイルだけが実行されます.どのファイルが実行されているかを確認するためには php artisan migrate:status
コマンドを実行します.また,マイグレーションの実行を元に戻す(つまりロールバックする)ためには php artisan migrate:rollback
コマンドを実行します.
次の例では,(1) マイグレーションの状態を確認(まだマイグレーションのテーブル自体がない),(2) マイグレーションの実行(テーブルの作成),(3) マイグレーションの状態を確認(全てのテーブルが実行された) (4) ロールバック,(5) マイグレーションの状態確認(全てが実行されていない),(6) マイグレーションの実行,の順で作業しています.
vagrant@ubuntu2204 comment_app $ php artisan migrate:status ⏎ ERROR Migration table not found. vagrant@ubuntu2204 comment_app $ php artisan migrate ⏎ INFO Preparing database. Creating migration table ................................. 16ms DONE INFO Running migrations. 2014_10_12_000000_create_users_table ..................... 13ms DONE 2014_10_12_100000_create_password_reset_tokens_table ...... 6ms DONE 2019_08_19_000000_create_failed_jobs_table ............... 12ms DONE 2019_12_14_000001_create_personal_access_tokens_table .... 18ms DONE 2023_10_15_115031_create_comments_table ................... 6ms DONE vagrant@ubuntu2204 comment_app $ php artisan migrate:status ⏎ Migration name ...................................... Batch / Status 2014_10_12_000000_create_users_table ....................... [1] Ran 2014_10_12_100000_create_password_reset_tokens_table ....... [1] Ran 2019_08_19_000000_create_failed_jobs_table ................. [1] Ran 2019_12_14_000001_create_personal_access_tokens_table ...... [1] Ran 2023_10_15_115031_create_comments_table .................... [1] Ran vagrant@ubuntu2204 comment_app $ php artisan migrate:rollback ⏎ INFO Rolling back migrations. 2023_10_15_115031_create_comments_table .................. 12ms DONE 2019_12_14_000001_create_personal_access_tokens_table ..... 5ms DONE 2019_08_19_000000_create_failed_jobs_table ................ 4ms DONE 2014_10_12_100000_create_password_reset_tokens_table ...... 5ms DONE 2014_10_12_000000_create_users_table ...................... 5ms DONE vagrant@ubuntu2204 comment_app $ php artisan migrate:status ⏎ Migration name ...................................... Batch / Status 2014_10_12_000000_create_users_table ....................... Pending 2014_10_12_100000_create_password_reset_tokens_table ....... Pending 2019_08_19_000000_create_failed_jobs_table ................. Pending 2019_12_14_000001_create_personal_access_tokens_table ...... Pending 2023_10_15_115031_create_comments_table .................... Pending vagrant@ubuntu2204 comment_app $ php artisan migrate ⏎ INFO Running migrations. 2014_10_12_000000_create_users_table ..................... 17ms DONE 2014_10_12_100000_create_password_reset_tokens_table ...... 4ms DONE 2019_08_19_000000_create_failed_jobs_table ................ 8ms DONE 2019_12_14_000001_create_personal_access_tokens_table .... 11ms DONE 2023_10_15_115031_create_comments_table ................... 4ms DONE vagrant@ubuntu2204 comment_app $