【问题标题】:Laravel 5.2 how to update migration without losing dataLaravel 5.2 如何在不丢失数据的情况下更新迁移
【发布时间】:2017-02-17 11:00:15
【问题描述】:

我使用的是 laravel 5.2,我通常会根据项目要求更新我的数据库,所以我想在不丢失数据库记录的情况下这样做。 我不是说如何播种我的数据库。我的意思是当我的数据库处于活动状态并且我想更新它时抛出 laravel 迁移。 我本来想扔Laravel Documentation但我什么也没找到,所以我希望能找到人帮助我

【问题讨论】:

    标签: php laravel-5.2


    【解决方案1】:

    由于您的表中已经有数据,因此您可以创建新的迁移文件来更新您的表,而不是回滚迁移(这会导致现有数据丢失)。假设您有一个表users,其中列name, email, password。您将数据存储在该表中。然后您意识到您还需要在您的用户表中添加一个名为mobile_no 的新列。为此,您需要创建一个新的迁移文件。命令将是:

    php artisan make:migration add_mobile_no_columns_to_users_table --table=users
    

    这样会创建一个新的迁移文件。在那里设置您的列详细信息,使用php artisan migrate 运行迁移,仅此而已。您将在 users 表中拥有这个新列,而不会丢失以前存储的数据。

    【讨论】:

    • 非常感谢,运行顺利。更新表关系时可以用同样的方法吗?
    • 是的,你可以。不同之处在于更新关系有点不同。对于已经声明的带有索引的外键,您需要删除索引,删除外键名称然后删除列。除非它可能会产生错误。您可以在laravel.com/docs/5.3/migrations#indexes找到更多详细信息
    • 谢谢@Mahfuzul Alam
    • Mahfuzul Alam ...非常好的解决方案...正是为这个而冲浪...谢谢!
    • 很多时候我尝试了各种方法来做到这一点,但这次有了你的回答,我得到了最终的解决方案。
    【解决方案2】:

    请注意,当您在已有数据的情况下为表添加新列时,您必须为新列设置默认值或使其为可空类型..否则您会报错

    【讨论】:

      【解决方案3】:

      确保当您在表中添加新列时,该列应该可以为空,并且不应该是唯一的。否则你将面临错误。因为当创建一个新列时,它将是空的(不是唯一的)。在这种情况下,您必须回滚迁移。

      【讨论】:

        【解决方案4】:

        使用

        进行新的迁移
        php artisan make:migration change_body_to_nullable_in_reviews_table --table=reviews
        

        你把这个放在哪里

            public function up()
            {
                Schema::table('reviews', function (Blueprint $table) {
                    $table->text('body')->nullable()->change();
                });
            }
        
            public function down()
            {
                Schema::table('reviews', function (Blueprint $table) {
                    $table->text('body')->nullable(false)->change();
                });
            }
        

        然后运行 ​​PHP artisan migrate

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-07
          • 2016-04-27
          • 1970-01-01
          • 1970-01-01
          • 2019-06-04
          • 2021-04-22
          • 1970-01-01
          相关资源
          最近更新 更多