目前,我使用的是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库,它们不使用二进制版本。
- Ramsey UUID
- Webpatser UUID
- EmadAdly UUID
我通过使用返回uuid文本版本的代码Mymodel::generateUuid(true)
找到了一种解决此问题的方法。但我不确定这是最好的方法。任何其他想法都欢迎发表。
return Furniture::create([
'id' => Furniture::generateUuid(true),
'name' => $request['name'],
'code' => $request['code'],
]);