运行 artisan 命令时无法更改 table 上的一对一关系错误

One to one relationship error on can't alter table when run artisan command

我有多个包,用户一次只能有一个包,不能多个。因此,我创建了一对一关系并在我的用户 table.

中添加了一个外键

相关用户table:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password', 60);
        $table->string('role');
        $table->unsignedInteger('package_id');
        $table->rememberToken();
        $table->nullableTimestamps();

        $table->foreign('package_id')
            ->references('id')
            ->on('packages');
    });
}

这是包 table:

public function up()
{
    Schema::create('packages', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->integer('price');
        $table->integer('space');
        $table->string('space_type');
        $table->string('trial')->nullable();
        $table->string('trial_period')->nullable();
        $table->string('password_protected_links')->nullable();
        $table->nullableTimestamps();
    });
}

但是,当我运行比php artisan migrate:refresh出现以下错误时:

[Illuminate\Database\QueryException]
  SQLSTATE[HY000]: General error: 1005 Can't create table 'clouder.#sql-834_1
  4' (errno: 150) (SQL: alter table `users` add constraint users_package_id_f
  oreign foreign key (`package_id`) references `packages` (`id`))

[PDOException]
  SQLSTATE[HY000]: General error: 1005 Can't create table 'clouder.#sql-834_1
  4' (errno: 150)

但是,我相信我已经正确地创建了外键。我还有什么地方做错了吗?

我现在已经自行解决了这个问题。我遇到的问题是由迁移顺序引起的。 create_users_table 迁移随 Laravel 5.2 一起开箱即用,当我创建新迁移时 create_packages_table 第一个 create_users_table 迁移的顺序,它之前加载create_packages_table。因此,当查询尝试创建 foreign 键时,它找不到 packages table 上的列。因此,只需重命名 create_users_table 日期以确保它在 create_packages_table 解决问题后加载。

我希望在某些日子里有人会觉得它有用。