我有多个包,用户一次只能有一个包,不能有多个。所以,我创建了一对一关系,并在users表中添加了外键。
以下是相关用户表:

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');
    });
}

这是包裹表:
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修复问题后加载。
我希望有人能在几天内找到它的帮助。

关于php - 运行artisan命令时无法更改表上的一对一关系错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35031155/

10-10 03:32