运行 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
解决问题后加载。
我希望在某些日子里有人会觉得它有用。
我有多个包,用户一次只能有一个包,不能多个。因此,我创建了一对一关系并在我的用户 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
解决问题后加载。
我希望在某些日子里有人会觉得它有用。