Laravel 重命名列丢失所有数据

Posted

技术标签:

【中文标题】Laravel 重命名列丢失所有数据【英文标题】:Laravel rename column loss all data 【发布时间】:2021-10-16 08:59:11 【问题描述】:

我是 Laravel 的新手,我使用 php artisan migrate 命令创建了一个用户表:

    Schema::create('users', function (Blueprint $table) 
        $table->increments('id');
        $table->timestamps();
        $table->string('username');
        $table->string('email');
        $table->string('password');
        $table->rememberToken();

    );

之后,我只需将username 列更改为first_name,然后我将架构更改如下:

    Schema::create('users', function (Blueprint $table) 
        $table->increments('id');
        $table->timestamps();
        $table->string('first_name');
        $table->string('email');
        $table->string('password');
        $table->rememberToken();
    );

如果我再次运行php artisan migrate 命令,它显示Nothing to migrate,然后我使用rollback,并且我丢失了所有表数据。如何在不影响数据的情况下编辑表结构?我讨厌 Laravel 文档

【问题讨论】:

【参考方案1】:

您应该创建并注册新的迁移并使用Schema::table()renameColumn() 方法重命名列:

Schema::table('users', function ($table) 
    $table->renameColumn('from', 'to');
);

要重命名列,您可以使用架构构建器上的renameColumn 方法。

【讨论】:

是的,我做到了.. 那么终端命令是什么。我使用了 php artisan migrate,它说没有迁移 也许您忘记向composer dumpauto 注册迁移?如果您已正确完成所有操作,只需运行 php artisan migrate 即可运行此迁移。 谢谢.. 我不知道dumpauto【参考方案2】:

让我们从您的架构开始。你的表名是users。它包含一个名为username 的列,您希望将其更改为first_name 而不会丢失现有数据。您需要为此更改创建新的迁移。

php artian make:migration rename_columns_to_users_table --table=users

将在您的迁移目录中创建一个新的迁移文件。打开它并像这样更改它:

Schema::table('users', function ($table) 
    $table->renameColumn('username', 'first_name');
);

保存后再运行

php artisan migrate

您的列名将立即重命名,而不会丢失您的旧数据。希望你现在明白了。

您将在此处找到更多详细信息:https://laravel.com/docs/5.3/migrations#renaming-columns

【讨论】:

谢谢兄弟.. 它有效。但是第一次出现错误[Symfony\Component\Debug\Exception\FatalErrorException] Class 'Doctrine\DBAL\Driver\PDOmysql\Driver' not found,因为我只是用"require": "laravel/framework": "4.1.*", "doctrine/dbal": "~2.3" ,编辑composer.json@ 抱歉,lavavel v:5.3 应该是 "laravel/framework": "5.3.*", "doctrine/dbal": "~2.3"

以上是关于Laravel 重命名列丢失所有数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Visual Studio 数据库项目重命名列?

Visual Studio 数据库项目重命名列

熊猫按位置重命名列? [复制]

熊猫重命名列

在 python 或 Pyspark 数据框中使用特殊字符重命名列

Python Pandas 合并(和连接)是不是无法通过后缀参数重命名列?