Laravel 5.2如何在不丢失数据的情况下更新迁移

时间:2016-10-08 15:42:42

标签: php laravel-5.2

我使用laravel 5.2并且我通常会根据项目要求更新我的数据库,所以我想在不丢失数据库记录的情况下这样做。 我并不是指如何为我的数据库设定种子。我的意思是当我的数据库存在并且我想要更新它时抛出laravel迁移。 我要去Laravel Documentation,但我一无所获,所以我希望找到一个帮助我的人

4 个答案:

答案 0 :(得分:45)

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

php artisan make:migration add_mobile_no_columns_to_users_table --table=users

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

通过以下方式进行新迁移

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 migration