【问题标题】:Laravel Forge: Base table or view already exists: 1050 Table already existsLaravel Forge:基表或视图已存在:1050 表已存在
【发布时间】: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 上的这个错误,但不删除表,因为我想保留记录。

标签: php mysql laravel


【解决方案1】:

在您的迁移中,您可以简单地使用

if (!Schema::hasTable('job_posts')) {
  // your migrations
}

如果为 false,则运行迁移。

这样您的记录就不会被删除。

希望对你有帮助

【讨论】:

  • Forge 仍然给我同样的错误,即使在添加之后。
  • @FelixMaxime 我已经更新了答案有答案了
猜你喜欢
  • 1970-01-01
  • 2018-02-18
  • 2022-07-09
  • 1970-01-01
  • 2021-04-08
  • 2016-01-28
  • 2018-05-23
  • 2019-12-30
  • 2019-03-05
相关资源
最近更新 更多