php - for - switch laravel
Laravel 5.1 Tipo de base de datos desconocido enumeraciĆ³n solicitada (3)
Es un problema conocido como se indica en la documentation Laravel 5.1.
Nota: actualmente no se admite el cambio de nombre de columnas en una tabla con una columna
enum
.
Ocurre cuando tienes una columna enum
en tu tabla de base de datos. Si está intentando cambiar el nombre de otra columna, o cambiar otra columna a nullable
, aparecerá este error. Es un problema con Doctrine/DBAL
.
Una solución fácil para esto es simplemente agregar este método constructor en su archivo de migración de base de datos.
public function __construct()
{
DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping(''enum'', ''string'');
}
Esto asignará todas las columnas ENUM
a VARCHAR()
, y la columna aceptará cualquier cadena.
Esto me funcionó en Laravel 5.1 y Laravel 5.3. Espero que este error se pueda solucionar pronto.
Gracias a la respuesta de @Gmatkowski en https://stackoverflow.com/a/32860409/1193201
Mientras ejecutaba php artisan migrate , recibí el siguiente error
[Doctrine / DBAL / DBALException]
Tipo de base de datos desconocido enumeración solicitada, Doctrine / DBAL / Platforms / MySqlPlatform puede no admitirlo.
Cómo resolver este problema.
Código:
public function up() {
Schema::table(''blogs'', function (Blueprint $table) {
$table->string(''wordpress_id'')->nullable();
$table->string(''google_blog_id'')->nullable()->change();
});
}
La documentation oficial de Laravel 5.1 establece:
Nota: actualmente no se admite el cambio de nombre de columnas en una tabla con una columna enum.
No importa si está intentando cambiar otra columna, si la tabla contiene una enum
cualquier lugar no funcionará. Es un problema de Doctrine DBAL.
Como solución alternativa, puede eliminar la columna y agregar una nueva (los datos de la columna se perderán ):
public function up()
{
Schema::table(''users'', function(Blueprint $table)
{
$table->dropColumn(''name'');
});
Schema::table(''users'', function(Blueprint $table)
{
$table->text(''username'');
});
}
o use una declaración DB:
public function up()
{
DB::statement(''ALTER TABLE projects CHANGE slug url VARCHAR(200)'');
}
public function down()
{
DB::statement(''ALTER TABLE projects CHANGE url slug VARCHAR(200)'');
}
Una verdadera solución sucia, que hace el trabajo, no obstante, sería
update Doctrine/DBAL/Schema/MySqlSchemaManager.php
Adicionando estas líneas justo arriba de la línea 113
$this->_platform->registerDoctrineTypeMapping(''enum'', ''string'');
$type = $this->_platform->getDoctrineTypeMapping($dbType);
Tenga en cuenta que actualizar los archivos de proveedores directamente no es aconsejable, ya que en el caso de que vonder elija actualizar el complemento, sus cambios podrían sobrescribirse.