【Laravel】マイグレーションを実行する際に出たエラーを解決したいと思っています。Illuminate\Database\QueryException SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name
解決したいこと
Laraval usersテーブルを更新したいです。
現在Laravelを使用してマイグレーションファイルをつくっています。
既存の「usersテーブル」に変更を加え、マイグレーションした際にエラーが発生しました。
発生している問題・エラー
Illuminate\Database\QueryException
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'last_name' (SQL: alter table `users` add `last_name` varchar(10) not null, add `first_name` varchar(10) not null, add `employee_num` int unsigned not null, add `admin_flg` tinyint(1) not null default '0', add `job_type_id` bigint unsigned not null, add `hire_date` datetime not null)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:712
708▕ // If an exception occurs when attempting to run a query, we'll format the error
709▕ // message to include the bindings with SQL, which will make this exception a
710▕ // lot more helpful to the developer instead of just the database's errors.
711▕ catch (Exception $e) {
➜ 712▕ throw new QueryException(
713▕ $query, $this->prepareBindings($bindings), $e
714▕ );
715▕ }
716▕ }
開発環境
・Windows10
・Laravel
・VScode
・mariadb
・Docker(起動た状態で実行)
エラーに至るまでの流れ
①既存のusersテーブルに変更を加えるため、以下のコマンドを実行
php artisan make:migration add_columns_to_users_table --table=users
→正常にマイグレーションファイルが作成される
②マイグレーションファイルに変更点を追加
public function up()
{
Schema::table('users', function (Blueprint $table) {
// メアドは50文字までかつ 正の値かつ 一意に変更
$table->string('email',50)->unsigned()->unique()->change();
// パスワードは30文字までに変更
$table->string('password',30)->nullable()->change();
// food_idは正の値かつ user_id の外部キーに指定
$table->bigInteger('food_id')->unsigned()->foreignId('user_id')->constrained('users');
// デフォルトの名前は削除
$table->dropColumn('name');
});
}
③カラムに対する変更ができるようパッケージを追加
composer require doctrine/dbal
→正常に追加される
④マイグレーションしたところエラーが発生
php artisan migrate
調べたこと
・ Illuminate\Database\QueryException
→データベース関係のエラーである
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'last_name'
→SQLSTATE [42S21]: 列が既に存在します: 1060 列が重複している
考えられること
・重複しているということで同じ処理を書いてしまっていないか確認しましたが
記述自体に重複する点は見られませんでした。
またコメントを頂き、以下のコマンドで確認したところNoのファイルは1つのみ(今回作成したマイグレーションファイル)という状態でした。
$php artisan migrate:status
・新しく作ったマイグレーションファイルがDBに接続できていないのではないかと考え、
PCのコマンドプロンプトでSQLが存在するか調べたところインストールされていない状況でした。
(Dockerを使用してサーバーを立ち上げています)
・使用しているDBが「mariadb」(調べたところSQLと近しいDB)のため、
SQLをインストールすることで解決できるのか分かりかねる状況でした。
同じようなエラーを経験した方で、解決できた方法等ありましたら教えて頂けますと幸いです。