【发布时间】:2021-08-21 16:56:53
【问题描述】:
Error: SQLSTATE[HY000]: General error: 1005 Can't create table epicit_cms.ep_users (errno: 150 "外键约束格式不正确") (SQL: alter table ep_users add constraint @ 987654324@外键(client_id)在删除级联时引用ep_clients(id)
有人能解释一下应该怎么做吗?
我想要实现的是。如果我想删除一个客户端,它也应该删除具有相同客户端 ID 的用户,但我无法做到这一点,因为我无法迁移我的外键
迁移:
用户表
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('name');
$table->string('insertion')->nullable();
$table->string('secondname');
$table->string('email')->unique();
$table->string('password');
$table->integer('client_id');
$table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade');
$table->boolean('admin')->default(0);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
客户表
public function up()
{
Schema::create('clients', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('company_name');
$table->string('postal_code');
$table->string('street');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('clients');
}
型号:
用户关系
public function Client()
{
return $this->belongsTo(Client::class );
}
客户关系
public function user()
{
return $this->hasMany(User::class);
}
【问题讨论】:
-
我怀疑这是由于在
clients上使用$table->uuid('id')->primary();,然后尝试在users上使用$table->integer('client_id');。列类型必须相同才能使外键起作用。 -
你的表客户端还存在吗?通常首先创建用户(客户端应该链接到用户)
-
@TimLewis 我查看了数据库结构“$table->uuid('id')->primary();”在“clients”上它的 cha(36) 所以我从“$表->整数('client_id');"在 "users" 上到 " $table->char('client_id', 36)->default(0); " 仍然没有进展
-
@Dri372 没有办法在用户之前更改迁移订单客户
-
“clients”表迁移会创建一个名为“fields”的表。 (并且会删除一个名为“form_fields”的表)。如果要在创建“用户”表之前创建表,请将迁移重命名为用户迁移日期之前的日期
标签: laravel