Iva*_*lla 3 php mysql laravel-5 laravel-migrations
当我尝试应用我的迁移时,我收到此错误:
[Doctrine\DBAL\DBALException]
Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it.
Run Code Online (Sandbox Code Playgroud)
应用迁移,在数据库上创建枚举列,我得到错误,因此我无法执行nexts迁移,因为此迁移会抛出此错误.
在服务器中,我的MySQL版本为5.7.17
这是我的迁移代码:
class AddDocumentUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('document', 9)->unique();
$table->enum('document_type', ['dni', 'nie', 'nif', 'cif']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('document');
$table->dropColumn('document_type');
});
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢 ;)
可以在此处找到与laravel严格相关的信息.我强烈建议你阅读帖子.这不是一个laravel问题,它一直是Doctrine中的一个错误.
从上面的问题线程,用户henritoivar有一个有趣的想法.
引用这里:
这对我来说是laravel 5.2 with doctrine/dbal@^2.5.当你的桌子上有一个枚举并想要更改桌子上的任何一列时,你必须:
public function up()
{
Schema::getConnection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
Schema::table('jobs', function(Blueprint $table)
{
$table->decimal('latitude', 10, 6)->nullable()->change();
});
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否适合你,但值得一试.
我会发布这个评论,但这是一个该死的长读.
Doctrine 2的类型系统由flyweights组成,这意味着任何给定类型只有一个实例.此外,类型不包含状态.这两种假设都使得使用开发人员大量使用的Enum Type of MySQL变得相当复杂.当使用带有非调整的Doctrine 2应用程序的Enums时,由于未知的数据库类型"enum",您将从Schema-Tool命令中获得错误.默认情况下,Doctrine不会将MySQL枚举类型映射到Doctrine类型.这是因为Enums包含state(它们允许的值),而Doctrine类型则不包含.
从技术上讲,这可以解决.看到这里.但这与Laravel所依据的symfony严格相关.
重命名表中也包含enum类型列的任何列>目前不受支持.
虽然这不是一个答案,但我希望它指出你正确的方向,或者至少让你知道你面临的是什么.
更多相关问题: