我有一个个人访问令牌表,结构如下。
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?
由于各列的数据类型必须匹配,而且你的主键是 User
模型具有 uuid
的格式, morphs()
方法在这种情况下是行不通的. 你可以像你在注释中所说的那样手动创建列, 但是(从laravel 5.8版本开始) uuidMorphs()
方法也是可用的。
创建列可用的栏目类型
$table->morphs('taggable');
增加 taggable_id
未签名的BIGINT 和 taggable_type
VARCHAR 等价列。
$table->uuidMorphs('taggable');
添加 taggable_id
CHAR(36) 和 taggable_type
VARCHAR(255) UUID 等价列。