Laravel UUID生成

vcirk6k6  于 2022-11-18  发布在  其他
关注(0)|答案(9)|浏览(307)

我正在尝试用laravel-uuid包生成一个UUID(不是作为主键,只是生成一个)。文档非常简单,所以根据自述文件,应该通过调用$uuid = Uuid::generate();生成一个UUID,但它返回一个空对象。(我也尝试了$uuid = Uuid::generate(1);
我按照那里提供的安装说明(没有什么不寻常的),应用程序没有抛出任何错误,所以我猜一切都是正确的。
也欢迎提供替代方案。

smtd7mpg

smtd7mpg1#

laravel 5.6之后,添加了一个新的帮助程序来生成通用唯一标识符(UUID)

use Illuminate\Support\Str;

return (string) Str::uuid();

return (string) Str::orderedUuid();

这些方法返回Ramsey\Uuid\Uuid对象
orderedUuid()方法将首先生成时间戳UUID,以便更轻松、更高效地建立数据库索引。

aemubtdh

aemubtdh2#

在Laravel 5.6+中

use Illuminate\Support\Str;

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

mfpqipee3#

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

tquggr8v

tquggr8v4#

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

8zzbczxx5#

1.在表名为'UUID',类型为'char'长度为36中添加列
1.在Models文件夹中创建名为“Traits”文件夹
1.在Traits文件夹中创建文件名Uuid.php
Uuid.php

<?php

namespace App\Models\Traits;

use Ramsey\Uuid\Uuid as PackageUuid;

trait Uuid
{

    public function scopeUuid($query, $uuid)
    {
        return $query->where($this->getUuidName(), $uuid);
    }

    public function getUuidName()
    {
        return property_exists($this, 'uuidName') ? $this->uuidName : 'uuid';
    }

    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            $model->{$model->getUuidName()} = PackageUuid::uuid4()->toString();
        });
    }
}

1.在模型中添加“使用Uuid”

rbl8hiat

rbl8hiat6#

尝试使用这个包将自动生成和分配UUID字段到你的模型中,也可以通过UUID键显示和更新。
https://github.com/EmadAdly/laravel-uuid

yqhsw0fo

yqhsw0fo7#

对于laravel〈5.6

使用DB::raw('uuid()');
请看下面例子
内模

use Illuminate\Support\Facades\DB;

public static function boot(){
    parent::boot();
    $creationCallback = function ($model) {
        if (empty($model->{$model->getKeyName()}))
            $model->{$model->getKeyName()} = DB::raw('uuid()');
    };
    static::creating($creationCallback);
}

优点

--如果您使用laravel〈5.6,则不必使用任何第三方插件来获取UUID

缺点

使用ORM保存数据后,您需要再次查询以获取最后插入的id,否则您将获得uuid()。

htzpubme

htzpubme8#

对于Laravel 9,您可以使用

use Illuminate\Support\Str;
 
return (string) Str::uuid();
zengzsys

zengzsys9#

在laravel 9中

use Illuminate\Support\Str;

return (string) Str::uuid()

为主键id laravel 9模型导入

use Illuminate\Database\Eloquent\Concerns\HasUuids;

然后在你的课上

use HasUuids;

相关问题