Laravel UUID一代

时间:2016-06-21 15:35:37

标签: php laravel uuid

我正在尝试使用https://docs.angularjs.org/api/ng/directive/ngChecked包生成UUID(不是主键,只生成一个)。文档非常简单,因此根据自述文件,只需调用$uuid = Uuid::generate();即可生成UUID,但它会返回一个空对象。 (我也试过$uuid = Uuid::generate(1);

我按照那里提供的安装说明(没有任何异常),应用程序不会抛出任何错误,所以我想一切都是正确的。

也欢迎替代套餐。

5 个答案:

答案 0 :(得分:16)

laravel 5.6 中添加了新助手以生成通用唯一标识符(UUID)

use Illuminate\Support\Str;

return (string) Str::uuid();

return (string) Str::orderedUuid();

方法返回Ramsey\Uuid\Uuid对象

orderedUuid()方法将生成时间戳第一个UUID,以便更轻松,更有效地进行数据库索引。

答案 1 :(得分:6)

原来我必须使用$uuid->string来获取实际ID,如果你试图在json响应中返回它,整个对象显示为空。

答案 2 :(得分:1)

$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)
    );
}

答案 3 :(得分:1)

尝试使用此软件包将自动生成并在您的模型中分配UUID字段,也可以通过UUID键显示和更新。

https://github.com/EmadAdly/laravel-uuid

答案 4 :(得分:0)

在Laravel 5.6及更高版本中

use Illuminate\Support\Str;

$uuid = Str::uuid()->toString();