当我尝试应用我的迁移时,我会得到以下错误:
[Doctrine\DBAL\DBALException]
Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it.
迁移是应用的,枚举列是在数据库上创建的,我得到了错误,所以我无法执行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');
});
}
}
(谢谢;)
发布于 2017-02-06 16:32:51
与laravel严格相关的信息可以找到这里。我强烈建议你读一下这条线。这不是一个拉拉的问题,它一直是一个错误的原则,从永远。
从上面的问题线程来看,用户henritoivar
有一个有趣的想法。
引用这里的话:
这对我来说是可行的如果表上有枚举,并且要更改表中的任何列,则必须:
public function up()
{
Schema::getConnection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
Schema::table('jobs', function(Blueprint $table)
{
$table->decimal('latitude', 10, 6)->nullable()->change();
});
}
我不知道这是否对你有用,但值得一试。
我本想把这个作为评论贴出来的,但它读起来太长了。
从官方理论文件中
原则2的类型系统由轻量组成,这意味着任何给定类型的实例都只有一个。此外,类型不包含状态。这两种假设都使得使用开发人员经常使用的Enum类型的MySQL变得相当复杂。当将enum与非调整的Doctrine 2应用程序一起使用时,由于未知的数据库类型“enum”,您将从Schema工具命令中获得错误。默认情况下,Doctrine不将MySQL枚举类型映射到Doctrine类型。这是因为Enum包含状态(它们的允许值),而Doctrine类型不包含。
从技术上讲,这是可以解决的。见这里。但这与拉勒维尔所赖以生存的symfony有严格的关系。
重命名表中具有枚举类型列的任何列,当前不支持。
虽然这不是一个答案,但我希望它能给你指明正确的方向,或者至少给你一个关于你面临的问题的想法。
更多相关问题:
发布于 2017-02-06 18:47:55
在包含ENUM类型的迁移文件中,添加具有以下内容的构造函数方法:
public function __construct() {
// Register ENUM type
DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
}
这在Laravel5.2对我来说很管用。您可以尝试将其添加到更高的级别,但这对我来说更快:)
https://stackoverflow.com/questions/42072360
复制相似问题