gpt4 book ai didi

php - Laravel UUID 及其独特性?

转载 作者:行者123 更新时间:2023-12-05 00:59:45 32 4
gpt4 key购买 nike

我有两个表,一个用于 lists,另一个用于存储已创建的 listshistory。这些 lists 非常临时,可以通过多种方法删除,因此我在历史记录中添加了一个 reason 字段。

//Lists table
Schema::create('lists', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('message');
$table->uuid('uuid');
$table->timestamps();
});

//History table
Schema::create('history', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('message');
$table->string('reason');
$table->uuid('uuid');
$table->timestamps();
});

现在两者都有一个 uuid 字段,我可以生成一个实际的字符串来使用 Laravel 的帮助函数 $uuid = (string) Str::uuid();

$list = new List;
$list->name = 'A basic fact of life';
$list->message = 'Pineapple does not belong on pizza.'
$uuid = (string) Str::uuid();
$list->uuid = $uuid;
$list->save();

现在,当我从 Lists 中成功删除一条记录时,我还会在历史记录中使用其数据创建一条新记录。

$list = find($id);
$destroy = List::destroy($id);
if($destroy) {
$history = new History;
$history->name = $list->name;
$history->message $list->message;
$history->uuid = $list->uuid;
$history->reason = 'some reason';
$history->save();
}

所以我的问题是,Laravel 如何知道我生成的下一个 UUID 实际上是唯一的?

所谓的重复问题链接实际上并没有说明它如何或是否知道下一个 UUID 实际上对于过去创建的 UUID 是唯一的,而是给出了一个概率。

最佳答案

Laravel 实现 UUID v4 , 由 RFC 4122 定义要独一无二。 RFC 声明(强调我的):

Identifier uniqueness considerations:
This document specifies three algorithms to generate UUIDs: the first leverages the unique values of 802 MAC addresses to guarantee uniqueness, the second uses pseudo-random number generators, and the third uses cryptographic hashing and application-provided text strings. As a result, the UUIDs generated according to the mechanisms here will be unique from all other UUIDs that have been or will be assigned.

Laravel 并不太“知道”它是唯一的,而是“信任”这是因为该算法被定义为是唯一的相对于该算法生成的所有其他算法。 p>

这里有一个重要的警告。该算法需要足够的熵源来保证 commonly cited claim在接下来的 100 年里,你需要每天创造数万亿美元才能有 50/50 的机会被骗。为此,Laravel 依靠 ramsey/uuid做实际的v4代。 ramsey/uuid uses ,长话短说,random_bytes因为它的熵。这是一个强大的加密源,足以符合 RFC 的 v4 生成条件。现在是重要的部分:

If none of the aforementioned sources are available, then an Exception will be thrown.

因此,当您的代码无法生成真正随机的全局唯一值时,您执行 (string)Str::uuid() 的代码将引发异常。

关于php - Laravel UUID 及其独特性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52751438/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com