Laravel,在创建模型时从uuid二进制文件转换为uuid文本



目前,我使用的是spatie-uuid包。问题是,在创建新行数据时,它会自动创建一个uuid二进制文件(16(,而不是uuid文本。我想插入uuid的文本版本。有可能做到吗?

型号

use HasBinaryUuid;
protected $table = 'furnitures';
protected $guarded = [];
public $incrementing = false;
public function getKeyName()
{
return 'id';
}

控制器(存储(

return Furniture::create([
'name' => $request['name'],
'code' => $request['code'],
]); //this automatically generate uuid binary(16) id

您正在使用的库通过将UUID存储为二进制来优化UUID。使用相同的库将其作为文本存储将违背其目的。您不应该有任何理由将其存储为文本,因为库正在为您进行所有转换。

例如,如果您想在URL或JSON中使用UUID,库可以为您从二进制转换为文本。

$model = MyModel::create();
dump($model->uuid_text); // "6dae40fa-cae0-11e7-80b6-8c85901eed2e" 

查看文档以获取更多示例。

Laravel还提供了其他UUID库,它们不使用二进制版本。

  1. Ramsey UUID
  2. Webpatser UUID
  3. EmadAdly UUID

我通过使用返回uuid文本版本的代码Mymodel::generateUuid(true)找到了一种解决此问题的方法。但我不确定这是最好的方法。任何其他想法都欢迎发表。

return Furniture::create([
'id' => Furniture::generateUuid(true),
'name' => $request['name'],
'code' => $request['code'],
]);

最新更新