在生产环境中重置Laravel迁移

时间:2019-07-04 08:21:30

标签: php mysql laravel

大家好

如果您不理解我的意思并原谅我的错误,英语不是我的母语,我将尽力尽可能清楚地解释我的问题,请随时更加精确地问我。


我的目标

我想再次开始使用迁移,因为一年之后,我公司的开发人员通过直接从phpmyadmin创建/删除/更新表来绕过它们,因此我需要创建一个新表。


你必须知道的事情

上一次迁移是在一年前,但是自那时以来,已经创建了许多没有迁移的表。


为什么我需要您的帮助

我想知道什么是开始重新使用迁移的最佳方法, 而不会丢失数据或表,因为我正在从事环境生产。 最好的方法是什么?保留已经存在的迁移,而忽略已创建的表?删除所有迁移文件并删除迁移表中的所有行?

如果我删除所有迁移文件并截断​​迁移表,那么php artisan migrate会对现有架构有影响吗?

最佳做法是什么?是否应该重新创建架构中所有表的所有迁移?还是只应使用要创建的新表创建一个迁移?

3 个答案:

答案 0 :(得分:1)

您可以通过删除所有迁移并截断迁移表从头开始。

然后看看this post为您当前的数据库架构重新创建所有迁移。

答案 1 :(得分:1)

Laravel使用专用表跟踪迁移,该表记录了应用时间。运行任何一个迁移时,它将在表中插入一条新记录,如果回滚迁移,则将删除相应的记录。因此,可以通过将不必要的迁移添加到该表中来防止其运行。

我的建议如下:

  • 创建丢失的迁移
  • 在本地副本上运行它们,以使数据库处于所需状态
  • 导出迁移表
  • 将其导入生产数据库
  • 如果要在本地运行之后再运行其他迁移,请在生产环境中运行

不过,我绝对要事先进行试运行-也许在导出迁移之后,将生产数据库导入本地副本,然后导入迁移并在那里进行检查。

我也倾向于采取措施阻止人们直接将更改应用到生产数据库中-这是非常危险的步骤,它避免了问责制并使得在本地测试您的应用程序变得困难。也许锁定PHPMyAdmin。

答案 2 :(得分:0)

在大多数情况下,我会尝试将迁移与表同步,以免丢失数据库中的当前数据,并且知道迁移已更新。 因此,从第一个表开始,无论您在表中手动添加了什么,都必须将其也添加到迁移中。 在将来的这种情况下,如果您需要创建数据库截断或其他任何内容,则您知道迁移已经是最新的。 老实说,最佳实践是在迁移中进行更改,而不是在数据库中进行更改,因此您尚未进行最佳实践。这是即使在您的情况下也可以做到的最佳做法,因此您可以像这样迁移到项目:

php artisan make:migration added_photo_to_user_table --table=users

,然后在您的迁移中:

 public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->text('photo')->nullable;

    });
}

然后您必须运行命令

php artisan migrate

但是在您的情况下,因为您已将字段添加到数据库中,所以您无需运行最后一条命令,而只需要进行迁移,因此在将来,如果您要更新数据库,则应将其作为最佳实践而且您不会遇到任何数据丢失。