如何解决雄辩的Uuid作为外键
我正在尝试将Uuids用作数据库中的外键。我希望管理表引用用户表。
用户表:
Schema::create('users',function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('name',80);
$table->string('email',80)->unique();
...
});
“我的管理员”表:
Schema::create('administrators',function (Blueprint $table) {
$table->increments('id');
$table->uuid('fk_user_id');
$table->foreign('fk_user_id')->references('id')->on('users')->onDelete('cascade');
...
});
我还尝试将外键分配为String,因为我的Uuid特性如下:
<?PHP
namespace App\Models\Concerns;
use Illuminate\Support\Str;
trait UsesUuid
{
protected static function bootUsesUuid()
{
static::creating(function ($model) {
if (! $model->getKey()) {
$model->{$model->getKeyName()} = (string) Str::uuid();
}
});
}
public function getIncrementing()
{
return false;
}
public function getKeyType()
{
return 'string';
}
}
因此我的管理员表如下:
Schema::create('administrators',function (Blueprint $table) {
$table->increments('id');
$table->string('fk_user_id',36);
$table->foreign('fk_user_id')->references('id')->on('users')->onDelete('cascade');
...
});
我总是会遇到相同的错误:
[2020-10-15 10:52:44] local.ERROR: sqlSTATE[42804]: Datatype mismatch: 7 ERROR: foreign key constraint "administrators_fk_user_id_foreign" cannot be implemented
DETAIL: Key columns "fk_user_id" and "id" are of incompatible types: character varying and uuid. (sql: alter table "administrators" add constraint "administrators_fk_user_id_foreign" foreign key ("fk_user_id") references "users" ("id") on delete cascade) {"exception":"[object] (Illuminate\\Database\\QueryException(code: 42804): sqlSTATE[42804]: Datatype mismatch: 7 ERROR: foreign key constraint \"administrators_fk_user_id_foreign\" cannot be implemented
DETAIL: Key columns \"fk_user_id\" and \"id\" are of incompatible types: character varying and uuid. (sql: alter table \"administrators\" add constraint \"administrators_fk_user_id_foreign\" foreign key (\"fk_user_id\") references \"users\" (\"id\") on delete cascade) at C:\\MyFolder\\Dev\\MyProjects\\Laravel\\VitruvianShield\\vitruvianshield\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.PHP:669)
[stacktrace]
和
[prevIoUs exception] [object] (PDOException(code: 42804): sqlSTATE[42804]: Datatype mismatch: 7 ERROR: foreign key constraint \"administrators_fk_user_id_foreign\" cannot be implemented
DETAIL: Key columns \"fk_user_id\" and \"id\" are of incompatible types: character varying and uuid. at C:\\MyFolder\\Dev\\MyProjects\\Laravel\\VitruvianShield\\vitruvianshield\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.PHP:463)
[stacktrace]
我该怎么做? 我发现的与此最接近的帖子是:
laravel 7 using as uuid foreign key
但是以某种方式不起作用。
我正在使用Laravel 8,顺便说一句。
谢谢您的帮助。
解决方法
在这里尝试:
Schema::create('administrators',function (Blueprint $table) {
...
$table->string('fk_user_id');
...
});
```
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。