在运行laravel的php artisan migrate命令时出现错误

5

我正在使用Laravel,并且我有一个包含以下函数的迁移:

public function up()
{
    Schema::table('articles', function (Blueprint $table) {
        $table->string('article_title',100)->change();
    });
}

当我在命令提示符中执行 'php artisan migrate' 命令时,出现错误:

[Doctrine\DBAL\DBALException] 请求未知的数据库类型enum,可能Doctrine\DBAL\Platforms\MySqlPlatform不支持它。

我甚至没有使用枚举!我也没有任何其他未迁移并带有枚举的迁移。


你之前创建过这个表吗?如果没有,你需要创建它。Schema::create('articles', function (Blueprint $table) { $table->string('article_title',100)->change(); }); - Trong Lam Phan
我有这个表格,也有这个列,但想把长度从50改为100 :) - Danielius
3个回答

3

列本身不必是枚举类型,但表中的任何列都不能是枚举类型。

以下是Laravel文档中重命名列部分的一行:

注意:目前不支持在具有枚举列的表中重命名列。


1
我相信我以前遇到过这个问题。问题在于提供给数据库迁移工厂的Schema类实际上是Doctrine\DBAL\Schema类的抽象,而不是直接复制。
当你第一次运行composer install时,会有几个“推荐”的依赖项需要安装。很少有人这样做,但最终你可能会发现一些小错误,并花费数小时才意识到“嘿...也许我应该尝试那些其他可选依赖项”?
不要像我一样。相反,请尝试我下面概述的方法。
您需要直接在"require":{下的composer.json文件中添加"doctrine/dbal": "^2.5"(或者在阅读时存在的任何稳定版本)。
添加了该行之后,执行composer update,然后将此行添加到您的迁移中:
use Doctrine\DBAL\Schema\Schema

完成这个操作后,您将不再看到该错误。

它应该长成这个样子,并且在那个“Schema”目录下是“Schema.php”文件,你需要在其中使用“Doctrine\DBAL\Schema\Schema”。 - Ohgodwhy
1
是的,我以前有它,但现在当我迁移时出现错误:[Symfony\Component\Debug\Exception\FatalErrorException]调用未定义的方法Doctrine\DBAL\Schema\Schema::table()。 - Danielius
Rob 写道我的表格中没有一个列应该是 enum,但我有一个这样的。也许我应该把它改成 int。不过怎么做呢?我能不进行迁移就直接修改吗? - Danielius
我们在一些项目中使用了enum,并将它们移植到了Laravel中,你也可以这样做,只需要付出一些劳动。但是,如果可以的话,我建议不要再使用enum类型列,因为它们只会带来管理上的麻烦,而且我们已经走得很远(到了2016年),现在真的没有必要再使用enum了。 - Ohgodwhy
1
确保您也调整了迁移文件。这将解决问题。 - Ohgodwhy
显示剩余4条评论

-1

Laravel 文档链接: 更改列。你需要在 composer.json 文件中添加 doctrine/dbal

注意:在更改列之前,请确保将 doctrine/dbal 依赖项添加到您的 composer.json 文件中。

或者运行以下命令:

composer require doctrine/dbal

是的,正如我在上面的答案中所发布的,我已经详细地概述了这一点。你的回答是重复的。 - Ohgodwhy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接