向表中添加新列
Posted
技术标签:
【中文标题】向表中添加新列【英文标题】:Add new column to table 【发布时间】:2019-09-03 07:57:47 【问题描述】:作为开发人员,我还是新手,我正在尝试更改用户表,是否从上一个表中添加了一个新列“user_type”。
我的问题是:我可以这样做还是应该这样做 php artisan make:migration add_user_type_users ?
因此,如果我可以在不使用 add_user_type_users 的情况下更改主表,我应该如何将其迁移到 laravel forge 中才能看到更改。因为,当我将更改提交到 forge 时,它不会添加我的新列 user_type.
新信息
如何将更改提交到实时数据库?我正在使用 Laravel Forge 和 DigitalOcean
【问题讨论】:
请勿修改已运行的迁移,除非您计划刷新数据库。相反,您必须创建另一个迁移文件来修改现有表。 我也想刷新数据库 如何创建另一个迁移文件来修改现有表? 如果您要刷新数据库,这将删除所有表然后重新创建它,然后继续修改旧的迁移文件。只需知道在您进行刷新之前更改不会生效。 然后你会使用你说的命令,php artisan make:migration add_user_type_to_users_table
,这将创建一个带有Schema::table
而不是Schema::create
的文件。
【参考方案1】:
(编辑:回答原始问题)
如果您需要将新闻栏添加到现有表中,您必须:
-
创建一个新的迁移文件:
php artisan make:migration <fileName>
在迁移文件上使用Schema::table()
而不是Schema::create()
像普通迁移一样添加列
运行迁移:php artisan migrate
示例:
//change create for table
//the first param (in this case 'users') must be the table name that you want to add columns
Schema::table('users', function (Blueprint $table)
//news colums here
$table->string('new_col');
);
编辑: 回答编辑的问题:
我可以这样做还是应该使用 php artisan make:migration add_user_type_users ?
-
是可行的,但不是正确的方式:
是的,您可以编辑旧的迁移文件,但如果这样做,您的下一个 php artisan migrate
将不会更改已经迁移的文件,在这种情况下,您必须在此处删除您的表和他的数据,并从迁移表中删除用于运行您编辑的迁移文件。所以这不是生产环境的答案。如果你这样做,你会遇到很多你会避免的问题。
也许您可以在开发人员上这样做。环境。因为您可以随时删除和创建表而不会丢失真实数据。
-
正确方法:
您必须创建新的迁移文件(就像原始答案一样),并且您不会遇到丢失数据的问题(除非您想要这样做),并且迁移将在生产环境中运行而无需删除任何内容。
【讨论】:
我做了一个 php artisan migrate:reset,它工作正常。但是如何将其部署到锻造/数字海洋中呢?通常我会提交,但在这个例子中没有什么可以提交 谁说迁移重置? 没有人,我只是假设它会回滚所有迁移并重新开始。有错吗? 阅读答案:1. 创建一个新迁移(1 个新迁移并保持旧迁移不变) 如果您按照步骤操作。您不会丢失任何数据以上是关于向表中添加新列的主要内容,如果未能解决你的问题,请参考以下文章
Hive - 向表中添加新列时,我得到:SemanticException [Error 10002]: Invalid column reference