Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 雄辩的uuid作为外键_Php_Laravel_Postgresql_Foreign Keys_Uuid - Fatal编程技术网

Php 雄辩的uuid作为外键

Php 雄辩的uuid作为外键,php,laravel,postgresql,foreign-keys,uuid,Php,Laravel,Postgresql,Foreign Keys,Uuid,我正在尝试将UUID用作数据库中的外键。我希望Admin表引用User表 数据库是PostgreSQL,但无论如何都应该可以工作 用户表: Schema::create('users', function (Blueprint $table) { $table->uuid('id')->primary(); $table->string('name', 80); $table->string('email', 80)

我正在尝试将UUID用作数据库中的外键。我希望Admin表引用User表

数据库是PostgreSQL,但无论如何都应该可以工作

用户表:

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

        ...

    });
我还尝试将外键指定为字符串,因为我的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]

我该怎么做? 关于这一点,我找到的最接近的帖子是:

但不知怎么的,它不起作用

顺便说一句,我用的是Laravel 8

谢谢您的帮助。

请尝试以下方法:

Schema::create('administrators', function (Blueprint $table) {
        ...

        $table->string('fk_user_id');

        ...

    });
```

您是否使用了trait
usesuid
的插件?我使用了这个包,但是使用了
mysql
,没有任何问题。我不仅用于模式生成,还用于种子机。该包在@JitendraYadav下运行得非常好。谢谢应该从一开始就使用它。只是为了确保,请检查postgres中的
uuid
的数据类型。
string(36)
uuid
都应该具有精确的数据类型错误是一列是uuid类型,另一列是varchar类型。不同的类型不能相互引用,谢谢@Martin的回复。我确实试过了。有或没有36个字符的限制。不过,我的问题已经由吉坦德拉·亚达夫解决了。无论如何,谢谢你。
Schema::create('administrators', function (Blueprint $table) {
        ...

        $table->string('fk_user_id');

        ...

    });
```