【问题标题】: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的文件。

标签: php laravel database-migration laravel-5.6


【解决方案1】:

(编辑:回答原始问题)

如果您需要将新闻栏添加到现有表中,您必须:

  1. 创建一个新的迁移文件:php artisan make:migration <fileName>
  2. 在迁移文件上使用Schema::table() 而不是Schema::create()
  3. 像普通迁移一样添加列
  4. 运行迁移: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 个新迁移并保持旧迁移不变)
  • 如果您按照步骤操作。您不会丢失任何数据
猜你喜欢
  • 2016-07-07
  • 2016-10-09
  • 2020-04-06
  • 2017-07-21
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多