1

我在 laravel 5.3 中创建了一些迁移文件。然后我做了迁移命令。之后,我在一个迁移文件中向我的表中添加了一些列,然后我删除了一个迁移文件......然后我运行 php artisan migrate:refresh 然后我收到了这个错误: 在此处输入图像描述 这个错误来自我删除的迁移文件. 看来 migrate:refresh 仍然需要它。那么我该如何解决这个错误......?

提前致谢.. :)

4

3 回答 3

1

最初我也遇到了麻烦,但意识到这是我实现 CLI(命令行界面)迁移命令的方式。请阅读下文。

当您创建迁移文件然后运行 ​​php artisan migrate 时,会在一个新的空数据库上发生一些事情:

  1. 创建一个迁移表来存储和跟踪您在数据库迁移文件目录中的迁移。

  2. 迁移文件的“UP”方法被触发并处理该方法中的任何逻辑。在大多数情况下,通常会使用 Schema 类在数据库中存储表。

==================================================== ========================

现在,当您运行“php artisan migrate:refresh”命令时,会发生一些事情。

  1. 系统根据迁移表中存储的内容检查数据库的表,以查看表是否存在。

  2. 它将彻底梳理数据库并清空所有数据的所有表。

  3. 然后它将使用存储在迁移表中的信息来检查每个表的迁移类的“向下”方法已经编码了哪些可能需要处理的代码。

  4. 在大多数情况下,它通常会在属于迁移表中列出的该表的特定类的“down”方法中触发“dropIfExists”方法。

    这是您发生错误的地方

如果迁移表中列出了一个迁移类,并且系统检查该类是否存在于数据库/迁移目录中并且它不存在?您通常会遇到某种错误,以一种或另一种方式引用该丢失的表。这取决于该表与其他所有内容的互连程度,或者该表是否完全列在迁移表中。

解决此问题的方法是确保更新数据库的方式有意义。

如果永久删除迁移文件

清空数据库和迁移表

  1. 在删除任何迁移文件之前,执行 'php aritsan migrate:rollback'

  2. 删除迁移文件。

  3. 执行 'php artisan migrate' 或 'migrate:refresh' (如果你真的想要)

如果更新数据库表

  1. 更新迁移文件后,执行 'php artisan migrate' 以在新批次中添加迁移,或执行 'migrate:refresh' 以将更新保留在同一迁移批次中。
于 2016-11-02T05:48:40.787 回答
0

我最终手动创建了该文件... :v 可能有解决此问题的好方法... :)

于 2016-08-27T14:57:40.753 回答
0

删除数据库并重新创建。

然后在命令行中运行这个命令

composer dump-autoload

然后运行这个命令

php artisan migrate
于 2017-01-08T03:07:34.747 回答