0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel6でカラム追加時にマイグレーションファイルのテーブル名を間違えた

Last updated at Posted at 2021-06-18

##経緯
既存のusersテーブルにカラムを追加しようとして、以下を実行。

ターミナル
$ php artisan make:migration add_columns_share_id_to_user_table --table=user

作成されたファイルを次のように修正。

2021_06_18_180516_add_columns_share_id_to_user_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddColumnsShareIdToUserTable extends Migration
{
    // 〜省略〜
    public function up()
    {
        Schema::table('user', function (Blueprint $table) {
            $table->string('share_id', 8); //追加
        });
    }

    // 〜省略〜
    public function down()
    {
        Schema::table('user', function (Blueprint $table) {
            $table->dropColumn('share_id'); //追加
        });
    }
}

ターミナル
$ php artisan migrate   

ファイル修正後に上記を実行したらエラー発生。

##エラー内容(1)

ターミナル
   Illuminate\Database\QueryException  : SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.user' doesn't exist (SQL: alter table `user` add `share_id` varchar(8) not null)

  at /Applications/MAMP/htdocs/プロジェクト名/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669
    665|         // If an exception occurs when attempting to run a query, we'll format the error
    666|         // message to include the bindings with SQL, which will make this exception a
    667|         // lot more helpful to the developer instead of just the database's errors.
    668|         catch (Exception $e) {
  > 669|             throw new QueryException(
    670|                 $query, $this->prepareBindings($bindings), $e

##対応(1)
見直してみると、最初にターミナルでマイグレーションファイルを作成したときに、テーブル名を間違えています。

以下のようにファイルを修正。

2021_06_18_180516_add_columns_share_id_to_users_table.php
// ↑ファイル名をuserからusersに変更しています。

    // 〜省略〜

class AddColumnsShareIdToUserTable extends Migration
{
    // 〜省略〜
    public function up()
    {
        Schema::table('users', function (Blueprint $table) { // ←userからusersに変更
            $table->string('share_id', 8);
        });
    }

    // 〜省略〜
    public function down()
    {
        Schema::table('user', function (Blueprint $table) { // ←userからusersに変更
            $table->dropColumn('share_id');
        });
    }
}


修正後、composer dump-autoloadを実行した後に、再度php artisan migrateを実行。

ターミナル
$ composer dump-autoload

Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: barryvdh/laravel-debugbar
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 4960 classes


$ php artisan migrate

しかし、再度エラー発生。
エラー内容は先ほどから変わっています。

##エラー内容(2)

ターミナル
   Symfony\Component\Debug\Exception\FatalThrowableError  : Class 'AddColumnsShareIdToUsersTable' not found

  at /Applications/MAMP/htdocs/プロジェクト名/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:453
    449|     public function resolve($file)
    450|     {
    451|         $class = Str::studly(implode('_', array_slice(explode('_', $file), 4)));
    452| 
  > 453|         return new $class;
    454|     }
    455| 
    456|     /**
    457|      * Get all of the migration files in a given path.

  Exception trace:

  1   Illuminate\Database\Migrations\Migrator::resolve("2021_06_18_180516_add_columns_share_id_to_users_table")
      /Applications/MAMP/htdocs/プロジェクト名/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:189

  2   Illuminate\Database\Migrations\Migrator::runUp("/Applications/MAMP/htdocs/プロジェクト名/database/migrations/2021_06_18_180516_add_columns_share_id_to_users_table.php")
      /Applications/MAMP/htdocs/プロジェクト名/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:165

  Please use the argument -v to see more details.

##対応(2)
よくよく見直すと、あと一ヶ所間違っているところがありました。

2021_06_18_180516_add_columns_share_id_to_users_table.php
    // 〜省略〜

class AddColumnsShareIdToUsersTable extends Migration // ここです。User→Users
{
    // 〜省略〜

上記を修正した後に再度 composer dump-autoloadを実行し、php artisan migrateを実行したら無事成功しました。

##まとめ
マイグレーションファイルを作成するときにテーブル名を間違えた場合は、

  • ファイル名
  • コード
    • class
    • public function up()
    • public function down()

の4ヶ所を修正し、composer dump-autoloadを実行すると改善する。

今後は、ターミナルでコマンドを実行する時は、もっとしっかり確認しようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?