Ответ 1
При отбрасывании индексов Laravel ожидает, что будет указано полное имя индекса.
Вы можете проверить свою базу данных на полное имя индекса, но если ключ был сгенерирован предыдущей миграцией Laravel, его имя должно соответствовать единому, простому соглашению об именах.
Вот что документация должна сказать о своем соглашении об именах (начиная с версии 5.2):
По умолчанию Laravel автоматически назначает разумное имя индексам. Просто соедините имя таблицы, имя проиндексированного столбца и тип индекса.
Мое предположение - вот почему вы получаете ошибку. Нет индекса email
, но, вероятно, есть индекс guests_email_unique
.
Дайте этой миграции выстрел:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AlterGuestsTable3 extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('guests', function(Blueprint $table)
{
$table->dropUnique('guests_email_unique');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('guests', function(Blueprint $table)
{
//Put the index back when the migration is rolled back
$table->unique('email');
});
}
}
Я понимаю, что немного запутано, что при создании индекса вы указываете имена столбцов, но при отбрасывании индекса позже вам нужно указать полное имя индекса.
Обратите внимание, что я также скорректировал метод down()
, чтобы он возвращал уникальный индекс, добавляя его обратно.