テクニカル雑記帳です
dropColumnするつもりでdropしたらテーブルを消そうとしてびっくりした
原因
dropColumn
するべきところで drop
をしていた.
リファレンス
存在するテーブルを削除する場合は、dropかdropIfExistsメソッドを使います。
コードとエラー
// 正しいコード
Schema::connection($this->connection)->table('tableName', function (Blueprint $table) {
$table->dropColumn('createdAt');
$table->dropColumn('updatedAt');
});
// 間違ってるコード
Schema::connection($this->connection)->table('tableName', function (Blueprint $table) {
$table->drop('createdAt');
$table->drop('updatedAt');
});
- エラーの内容
[Illuminate\Database\QueryException]
SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'databaseName.tableName' doesn't exist
(SQL: drop table `products`)
唐突の drop table
😱
エラーにならなかったら恐ろしいことになってしまう.
ここで一番怖いと思ったことが, $table->drop('ココ')
で指定しているのがテーブル名でなくカラムなのに $table
で指されているテーブルを消そうとしていたこと.
「タイポでした〜😂」じゃすまないっすよ...
ちなみに,phpは関数の引数の数が合ってなくても動くので、$table->drop(‘カラム名’)
と書いても死なずに $table->drop()
と同等の動作をするためこのようなことになったと推測...
今回のエラーの追い方
- とりあえず実行して,エラーログを確認(
storage/logs/laravel-yyyy-MM-dd.log
) - エラーが起きているファイルと場所がわかったら,気になる箇所にdumpを入れて実行する
- dumpが出なかった手前でエラーが起きているので処理を1つずつ実行して見ていく
- 🤔💬 わたしは大体カラム名ミスってるとかメソッド名が違うとかtypoしてるとかが多いので同じようなことをしている他のファイルと見比べたりしながら原因を見つけました.