我试图用laravel-uuid包生成一个UUID(不是主键,只生成一个).文档非常简单,因此根据自述文件,UUID应该只通过调用生成$uuid = Uuid::generate();,但它返回一个空对象.(我也试过$uuid = Uuid::generate(1);)
我遵循那里提供的安装说明(没有什么不寻常的),应用程序不会抛出任何错误,所以我猜一切都是正确的.
也欢迎替代包装.
And*_*per 32
在 Laravel 5.6+
use Illuminate\Support\Str;
$uuid = Str::uuid()->toString();
Run Code Online (Sandbox Code Playgroud)
Hem*_*ela 28
在laravel 5.6中添加了一个新助手来生成通用唯一标识符(UUID)
use Illuminate\Support\Str;
return (string) Str::uuid();
return (string) Str::orderedUuid();
Run Code Online (Sandbox Code Playgroud)
方法返回一个Ramsey\Uuid\Uuid对象
该orderedUuid()方法将生成时间戳第一个UUID,以便更容易和更有效地进行数据库索引.
在 Laravel 9 和 10 中
use Illuminate\Support\Str;
return (string) Str::uuid();
Run Code Online (Sandbox Code Playgroud)
对于主键 id laravel 9 模型导入
use Illuminate\Database\Eloquent\Concerns\HasUuids;
Run Code Online (Sandbox Code Playgroud)
然后添加到你的班级中
use HasUuids;
Run Code Online (Sandbox Code Playgroud)
它可能$uuid是空的,因为您的系统没有提供正确类型的熵。您可以尝试使用 v4 或 v5 UUID 的这些库实现:
// https://tools.ietf.org/html/rfc4122#section-4.4
function v4() {
$data = openssl_random_pseudo_bytes(16, $secure);
if (false === $data) { return false; }
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
$data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
// https://tools.ietf.org/html/rfc4122#section-4.3
function v5($name) {
$hash = sha1($name, false);
return sprintf(
'%s-%s-5%s-%s-%s',
substr($hash, 0, 8),
substr($hash, 8, 4),
substr($hash, 17, 3),
substr($hash, 24, 4),
substr($hash, 32, 12)
);
}
Run Code Online (Sandbox Code Playgroud)