phpのlaravel6.xで成果物を作成しています。Herokuでデプロイの最後の工程のマイグレーションのheroku run php artisan migrateをすると、次のようなエラーが出てしまいました。
SQLSTATE[42701]:Duplicate column:7 ERROR : column “0” of relation “posts” already exists
原因は成果物作成時に似た二つのカラムをマイグレーションしてしまったためと思われます。成果物作成時に投稿の削除項目追加として次のコードでマイグレーションしました。
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddDeleteColumn extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('posts', function (Blueprint $table) { $table->softDeletesTz(0); // }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('posts', function (Blueprint $table) { // }); } } コード
これを作成した後に別の書き方で下記のものをマイグレーションしてしまいました。
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddDeletedAtToPostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('posts', function (Blueprint $table) { $table->softDeletes(); // }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('posts', function (Blueprint $table) { // }); } } コード
やってみたこと
・上記の一つ目のマイグレーションfileを手動でDeleteした。
・SQL のpostsテーブルに0というカラムが重複しているので、カラム削除でALTER TABLE posts DROP 0;をしたところ、SQL syntaxエラーが出た
・ALTER TABLE posts DROP "0";を実行するとsyntaxエラーが出た。
・postsテーブルに追加したのがdeleted_atという削除カラムだったのでALTER TABLE posts DROP deleted_atを実行すると、サイト画面がエラーになって、deleted_atがないという表示をされたので元に戻した。
・0のカラムがあるの確認するためにsqlでshow columns from posts;を実行すると下記のようになった。
| Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+---------+----------------+ | | 0 | timestamp | YES | | NULL | | | deleted_at | int(10) | YES | | NULL | | +------------+---------------------+------+-----+---------+----------------+ コード
何か改善策をいただけると幸いです????♀️