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 重命名列丢失所有数据的主要内容,如果未能解决你的问题,请参考以下文章