我有多个包,用户一次只能有一个包,不能有多个。所以,我创建了一对一关系,并在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/