migrations create conectar con php laravel laravel-5 laravel-migrations

php - create - Drop Unique Index Laravel 5



mongodb laravel ubuntu (2)

Seguí recibiendo esto mientras ejecutaba php artisan migrate

SQLSTATE [42000]: error de sintaxis o violación de acceso: 1091 No se puede DEJAR ''correo electrónico''; verificar que la columna / clave exista

Aunque veo que el correo electrónico existe en mi base de datos.

Mi script de migración Intentaba soltar la restricción única.

<?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(''email''); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table(''guests'', function(Blueprint $table) { $table->dropUnique(''email''); }); } }

¿Olvidé borrar algún caché?

¿Algún consejo para mí?


Al eliminar los índices, Laravel esperará que se proporcione el nombre completo del índice.

Puede consultar su base de datos para obtener el nombre completo del índice, pero si la clave fue generada por una migración Laravel anterior, su nombre debe ajustarse a una convención simple y simple.

Esto es lo que la documentación tiene que decir sobre su convención de nomenclatura (a partir de v5.2):

Por defecto, Laravel asigna automáticamente un nombre razonable a los índices. Simplemente concatene el nombre de la tabla, el nombre de la columna indexada y el tipo de índice.

Supongo que es por eso que estás recibiendo un error. No hay email índice de email , pero probablemente haya un índice de guests_email_unique .

Dale a esta migración una oportunidad:

<?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''); }); } }

Entiendo que es un poco confuso que al crear un índice especifique los nombres de las columnas, pero al soltar el índice más adelante, debe proporcionar el nombre completo del índice.

Tenga en cuenta que también he ajustado el método down() para que vuelva a soltar el índice único al volver a agregarlo.


Mediante documentación oficial, puede ver lo siguiente:

Si pasa una matriz de columnas a un método que suelta índices, el nombre de índice convencional se generará en función del nombre de la tabla, las columnas y el tipo de clave:

Schema::table(''geo'', function ($table) { $table->dropIndex([''state'']); // Drops index ''geo_state_index'' });



Puede soltarlo simplemente usando [] alrededor del nombre del campo:

Schema::table(''guests'', function(Blueprint $table) { $table->dropUnique([''email'']); });