【发布时间】:2017-01-08 11:07:34
【问题描述】:
我在 laravel 5.3 中创建了一些迁移文件。然后我做了迁移命令。之后,我在一个迁移文件中向我的表中添加了一些列,然后我删除了一个迁移文件......然后我运行 php artisan migrate:refresh 然后我得到了这个错误: 此错误来自我删除的迁移文件。看来 migrate:refresh 仍然需要它。那么我该如何解决这个错误...?
提前谢谢.. :)
【问题讨论】:
标签: laravel-5.3
我在 laravel 5.3 中创建了一些迁移文件。然后我做了迁移命令。之后,我在一个迁移文件中向我的表中添加了一些列,然后我删除了一个迁移文件......然后我运行 php artisan migrate:refresh 然后我得到了这个错误: 此错误来自我删除的迁移文件。看来 migrate:refresh 仍然需要它。那么我该如何解决这个错误...?
提前谢谢.. :)
【问题讨论】:
标签: laravel-5.3
我最初也遇到过这个问题,但我意识到这是我实现 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
【讨论】: