我在 laravel 5.3 中创建了一些迁移文件。然后我做了迁移命令。之后,我在一个迁移文件中向我的表中添加了一些列,然后我删除了一个迁移文件......然后我运行 php artisan migrate:refresh 然后我收到了这个错误:
这个错误来自我删除的迁移文件. 看来 migrate:refresh 仍然需要它。那么我该如何解决这个错误......?
提前致谢.. :)
最初我也遇到了麻烦,但意识到这是我实现 CLI(命令行界面)迁移命令的方式。请阅读下文。
当您创建迁移文件然后运行 php artisan migrate 时,会在一个新的空数据库上发生一些事情:
创建一个迁移表来存储和跟踪您在数据库和迁移文件目录中的迁移。
迁移文件的“UP”方法被触发并处理该方法中的任何逻辑。在大多数情况下,通常会使用 Schema 类在数据库中存储表。
==================================================== ========================
现在,当您运行“php artisan migrate:refresh”命令时,会发生一些事情。
系统根据迁移表中存储的内容检查数据库的表,以查看表是否存在。
它将彻底梳理数据库并清空所有数据的所有表。
然后它将使用存储在迁移表中的信息来检查每个表的迁移类的“向下”方法已经编码了哪些可能需要处理的代码。
在大多数情况下,它通常会在属于迁移表中列出的该表的特定类的“down”方法中触发“dropIfExists”方法。
这是您发生错误的地方
如果迁移表中列出了一个迁移类,并且系统检查该类是否存在于数据库/迁移目录中并且它不存在?您通常会遇到某种错误,以一种或另一种方式引用该丢失的表。这取决于该表与其他所有内容的互连程度,或者该表是否完全列在迁移表中。
解决此问题的方法是确保更新数据库的方式有意义。
如果永久删除迁移文件
清空数据库和迁移表
在删除任何迁移文件之前,执行 'php aritsan migrate:rollback'
删除迁移文件。
执行 'php artisan migrate' 或 'migrate:refresh' (如果你真的想要)
如果更新数据库表
我最终手动创建了该文件... :v 可能有解决此问题的好方法... :)
删除数据库并重新创建。
然后在命令行中运行这个命令
composer dump-autoload
然后运行这个命令
php artisan migrate