knvegr’s blog

学習メモ

【Laravel】migrationでカラム変更の際にハマったこと

概要

  • eventsテーブルのevent_remarksカラムの型変更を行った。

  • string型->text型に変更するようマイグレーションファイルに記載。

動作環境

  • Laravel5.5

  • PHP7.1

  • mysql5.5.6

ハマった箇所

  • migrateをした際に以下のようなエラーが発生。
SQLSTATE[42000]: Syntax error or access violation: 1170 BLOB/TEXT column 'event_remarks' used in key specification without a key length (SQL: ALTER TABLE ev
ents CHANGE event_remarks event_remarks TEXT DEFAULT NULL COLLATE utf8mb4_unicode_ci)

原因

  • event_remarksカラムにindexを設定していたことが原因。

解決策

public function up()
{
Schema::table('events', function (Blueprint $table) {
$table->dropIndex('events_event_remarks_index');
});

何故ハマったのか

  • Laravelのリファレンスをきちんと読んでいなかったこと。型変更の際に、changeメソッドでindexを指定しなければindexが消えると思い込んでいた。

  • 該当カラムにindexがはっているかどうかをmysqlで確認しなかった。 以下コマンドでtbl_nameにindexが設定されているカラムが確認できる。
    SHOW INDEX from tbl_name;