【发布时间】:2018-02-19 02:26:09
【问题描述】:
我之前遇到过这个错误,但这次有点不同。
当我将更新推送到 forge 时,Laravel Forge 说它无法部署,但它部署得很好。由于此错误,它不会对数据库结构进行任何更改:
[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[42S01]:基表或视图已存在:1050 表 “job_posts”已经存在
当我运行php artisan migrate:status 时,job_posts 表是唯一显示为未运行的表,即使它显然已经运行了。
此外,删除现有表或任何会删除现有记录的操作都是不可能的,因为此更改是在几周前进行的,并且用户已经开始使用它。
有没有办法在不删除现有记录的情况下解决这个问题?
【问题讨论】:
-
我猜你的迁移有错误。通常,迁移会成功创建表,但会以其他方式失败。这将导致迁移的状态未运行,但表存在。如果它在本地开发中成功运行,那么比较数据库系统中的差异。也许您对生产数据库进行了更严格的配置设置,而本地开发环境中不存在。
-
本地也会出现这个错误。
-
好的,这很有帮助。登录数据库,手动运行
DROP TABLE job_posts;,然后重新运行迁移。这一次,添加非常非常详细的选项以获取更多信息,以防迁移再次失败。php artisan -vvv migrate -
php artisan -vvv migrate迁移表没有错误。 -
啊。我认为它运行是因为我在迁移之前正在测试
Schema::dropIfExists('job_posts');。虽然我试图摆脱 Forge 上的这个错误,但不删除表,因为我想保留记录。