Laravel变形表的变形字段id大小大于1的时候

问题描述 投票:2回答:1

我有一个个人访问令牌表,结构如下。

public function up()
{
    Schema::create('personal_access_tokens', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->morphs('tokenable');
        $table->string('name');
        $table->string('token', 64)->unique();
        $table->text('abilities')->nullable();
        $table->timestamp('last_used_at')->nullable();
        $table->timestamps();
    });
}

现在,当我用一个自动递增的整数作为我的用户ID时,这个表工作得很好,因为它将在这个表中存储访问令牌,但我把我的用户ID改成了uuids。现在,我得到了以下错误,在当 个人访问密码 正在创建由于 可标记的ID 不能存储uuid(我想)

"SQLSTATE[01000]: Warning: 1265 Data truncated for column 'tokenable_id' at row 1 
(SQL: insert into `personal_access_tokens` (`name`, `token`, `abilities`, 
    `tokenable_id`, `tokenable_type`, `updated_at`, `created_at`) values (my-token, 
     ef16e51c374d0a2dddf029b29f59ae62eb518c64f2f19945f7adc2cd67548ca7, [\"*\"], 
     96481014-efb0-42ce-9037-1f256c074976, App\\User, 
     2020-05-15 21:08:39, 2020-05-15 21:08:39))",

有什么办法可以把 tokenable_id 字段改成接受 uuids?

php laravel uuid
1个回答
2
投票

由于各列的数据类型必须匹配,而且你的主键是 User 模型具有 uuid 的格式, morphs() 方法在这种情况下是行不通的. 你可以像你在注释中所说的那样手动创建列, 但是(从laravel 5.8版本开始) uuidMorphs() 方法也是可用的。

创建列可用的栏目类型


$table->morphs('taggable');

增加 taggable_id 未签名的BIGINTtaggable_type VARCHAR 等价列。


$table->uuidMorphs('taggable');

添加 taggable_id CHAR(36)taggable_type VARCHAR(255) UUID 等价列。


© www.soinside.com 2019 - 2024. All rights reserved.