Lat*_*san 17 php mysql migration laravel laravel-4
我正在使用Laravel 4.2.我在我的文件中加载了以下库composer.json
"doctrine/dbal": "2.4.*",
Run Code Online (Sandbox Code Playgroud)
我创建了以下迁移:
class RenameDeliveryNotesColumnOnOrderHeaderTable extends Migration {
public function up()
{
Schema::table('order_header', function(Blueprint $table)
{
$table->renameColumn('delivery_notes', 'packing_notes');
});
}
}
Run Code Online (Sandbox Code Playgroud)
当delivery_notes列类型text.
当我运行迁移时,我收到以下错误:
[Doctrine\DBAL\DBALException]请求未知的数据库类型枚举,Doctrine\DBAL\Platforms\MySqlPlatform可能不支持它.
知道我为什么会收到这个错误吗?我该怎么办呢?我需要在表格中重命名一列.有没有其他方法来重命名列?
Gma*_*ski 28
DB::getDoctrineSchemaManager()
->getDatabasePlatform()
->registerDoctrineTypeMapping('enum', 'string');
Run Code Online (Sandbox Code Playgroud)
这适用于Laravel 5.1
Iva*_*ova 15
注意:
enum不支持重命名列类型.
这里:https://github.com/laravel/framework/issues/1186
您可以找到有关此问题的一些解决方法.既然你说这个专栏没有enum,请看看@upngo的评论:
"...问题是在具有"." 的表上重命名任何列
enum.
此外,我发现这篇文章专注于这个问题,并建议一个可能对您有帮助的选项.
我在Laravel版本5.1.19(LTS)中遇到了这个问题.这对于早期版本也是如此.我想通知你,因为我根据之前的评论解决了这个问题.
首先,我在迁移文件中尝试了下一个代码:
$table->renameColumn('column_name');
Run Code Online (Sandbox Code Playgroud)
但是在命令之后php artisan migrate,我得到了下一个错误:
[Symfony\Component\Debug\Exception\FatalErrorException]未找到类'Doctrine\DBAL\Driver\PDOMySql\Driver'
如您所知,DBAL已从laravel核心中删除,我们需要将其添加到composer.json.(例如:) "require": {"doctrine/dbal": "2.5.1"}.我根据需要设置了DBAL并再次尝试执行迁移命令,但是出现了下一个错误:
[Doctrine\DBAL\DBALException]
请求未知的数据库类型枚举,Doctrine\DBAL\Platforms\MySqlPlatform可能不支持它.
然后我在我的迁移文件中尝试了下一个原始sql:For up():
DB::statement("ALTER TABLE `table_name` CHANGE `old_column_name` `new_column_name` ENUM('first value', 'second_value', ...) DEFAULT 'first_value' AFTER `some_field`");
Run Code Online (Sandbox Code Playgroud)
用于down():
DB::statement("ALTER TABLE `table_name` CHANGE `new_column_name` `old_column_name` ENUM('first value', 'second_value', ...) DEFAULT 'first_value' AFTER `some_field`");
Run Code Online (Sandbox Code Playgroud)
它的工作原理.
PS为了重命名包含枚举字段的表中的其他字段,我们应该使用与之前的注释中编写的原始sql相同的模式.
您可以向迁移添加自定义构造函数,并向Doctrine解释枚举应被视为字符串。
public function __construct(\Doctrine\DBAL\Migrations\Version $version)
{
parent::__construct($version);
$this->platform->registerDoctrineTypeMapping('enum', 'string');
}
Run Code Online (Sandbox Code Playgroud)