迁移错误后外键处于奇怪状态

In weird state with foreign key after migrations bug

我正在使用 laravel 5 进行我的第一个项目。我所有的迁移脚本都会创建 tables,除了之后添加外键约束的脚本(因此两个 tables 在 运行s 之前就位)。我在我的一个迁移脚本中发现了一个错误(缺少 parens made field non-nullable 而不是 nullable),所以在修复它之后,我尝试做 php artisan migrate:refresh

我遇到了几个错误,所以我(错误地)决定通过删除 tables(使用 PostgreSQL Studio,通过 Heroku)来进入一个新状态,但是 现在我陷入了一种奇怪的状态:

那个错误来自那个添加外键的迁移脚本 - 我从这里得到了整体语法 - (http://laravel.com/docs/5.0/schema#foreign-keys)- 如果错误请大声说出来:

class AddConstraintToUsers extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->foreign('person_id')
                ->references('id')
                ->on('people');
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropForeign('person_id');
        });
    }

}

更多信息: 根据下面的评论,我从迁移 table 中删除了行,因此它们不会被列为已经 运行(希望对 "Nothing to migrate" 有所帮助)。这样做并尝试 php artisan 迁移后,我得到了上面提到的相同的“关系 "users" 不存在”错误,现在迁移 table 显示 'batch' create_users_table 的值为 1,所有其他值为 2。

更疯狂:因为 artisan 运行 的迁移是有序的,并且认为它与 运行 无关(但已被阻止创建用户 table),我创建了一个新的迁移脚本来最后执行,其中的内容正在创建用户 table。至少它不再告诉我 'Nothing to migrate',但它给出了另一个 table(称为 'updates')的 'duplicate table' 错误,而不是我实际尝试创建两次的错误:p

我怎样才能回到正常的地方-(artisan 发现我的迁移脚本到 运行 是新鲜的,或者停止尝试回滚 table 的更改不再存在)- 我保证我已经吸取了教训,不要放弃 tables。不幸的是,这个问题看起来比平时 less-google-able(或者我没有使用正确的术语)- 非常感谢任何帮助!

最后,出路是也删除迁移 table(不知道为什么删除其中的所有行还不够,但至少我现在又回来了) :

  1. 我删除了数据库中的所有 table,包括迁移 table
  2. 我像这样用 artisan 重新创建了迁移 table:php artisan migrate:install
  3. 然后迁移运行成功,没问题:phpartisan:migrate

一切恢复正常 - 万岁!