向表中添加新列

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

向表中添加了列,但链接图表未使用新列数据更新

使用 ALTER TABLE 添加新列后 H2 数据库插入数据异常

Netezza:如何向表中添加列

Laravel 向表中添加外键

使用默认值向表中添加列