前提
状況
- Techpitで学習中、初めてLaradockを使ってDockerをインストール
- Windowsなので、Docker Toolbox使用
- Laravel上でMySQLのテーブルを作成する「マイグレーション」を実施する際に、少しつまづいたのでメモ
やりたかったこと
以下コードをLaravel上のdatabase/migrations
フォルダ直下に作ったファイルに記述
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateAppTables extends Migration { /** * Run the migrations. * * @return void */ public function up() { // テーブル① Schema::create('primary_categories', function (Blueprint $table) { $table->id(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { // テーブル① Schema::dropIfExists('prmary_categories'); } }
そして、
1. MySQL上でテーブルが正しく作れるか確認すべく
php artisan migrate
を実行し、MySQL上に"primary_categories"という名前のテーブルを作る
2. 次に、作成したテーブルを
php artisan migrate:rollback
でロールバックし問題なく実行できるか確認
3. 1.2.の実行結果を確認したのち、1.を再度実行
困ったこと
2.のロールバック実行後、
root@**********:/var/www# php artisan migrate:rollback Rolling back: 2019_08_19_000000_create_failed_jobs_table Rolled back: 2019_08_19_000000_create_failed_jobs_table (0.06 seconds) Rolling back: 2014_10_12_100000_create_password_resets_table Rolled back: 2014_10_12_100000_create_password_resets_table (0.01 seconds) Rolling back: 2014_10_12_000000_create_users_table // 作成したテーブルをロールバック Rolled back: 2014_10_12_000000_create_users_table (0.01 seconds) // 作成したテーブルをロールバック
と表示されたが、MySQLを確認すると
'primary_categories'テーブルが残っていた。(なぜだ。。。)
試しに1. を実行すると
php artisan migrate
を実行したところ、以下エラーが発生。
エラー文:SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'primary_categories' already exists
要約:既に'primary_categories'はあるよ!
「なぜかわからんけどロールバックができていないからか…」
とにかく、エラー対応。
やったこと
なぜロールバックできていないか考える
ロールバックするLaravel上のコードに問題があるか可能性が高いと推測しコードを確認
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
// テーブル①
Schema::dropIfExists('prmary_categories');
}
結果:〇
見つけました。"i"が抜けておりました。
正:primary_categories
誤:prmary_categories
- 実はコレ、「やりたかったこと」の2.実行前に気づいて、修正したところでした。
- 結論、タイポしていたせいで1.のマイグレでロールバック不可能なテーブルを作成してしまい、2.以降の実行の妨げになった、ということ。
対応策
MySQL上で"primary_categories"テーブルを削除
その後、再度マイグレーション、ロールバックを実行し、どちらも正常に処理できることを確認