Метод ulid
Метод ulid класса Str генерирует ULID-идентификатор -
26-символьную строку, состоящую из 10 байт времени в миллисекундах
и 16 байт случайных данных. ULID является лексикографически
сортируемым, что делает его удобным для использования в качестве
первичного ключа в базах данных. Метод не принимает параметров
и возвращает строку в формате ULID.
Синтаксис
<?php
use Illuminate\Support\Str;
$ulid = Str::ulid();
?>
Пример
Давайте сгенерируем ULID и выведем его на экран:
<?php
use Illuminate\Support\Str;
$res = Str::ulid();
echo $res;
?>
Результат выполнения кода:
"01H7HX6Z9X3J4K5M6N7P8Q9R0T"
Пример
Давайте сгенерируем несколько ULID и сравним их сортировку:
<?php
use Illuminate\Support\Str;
$ids = [];
for ($i = 0; $i < 5; $i++) {
$ids[] = Str::ulid();
}
sort($ids);
print_r($ids);
?>
Результат выполнения кода:
[
"01H7HX6Z9X3J4K5M6N7P8Q9R0T",
"01H7HX6Z9X3J4K5M6N7P8Q9R0U",
"01H7HX6Z9X3J4K5M6N7P8Q9R0V",
"01H7HX6Z9X3J4K5M6N7P8Q9R0W",
"01H7HX6Z9X3J4K5M6N7P8Q9R0X"
]
Пример
Давайте используем ULID в качестве первичного ключа для модели:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->ulid('id')->primary();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
}
?>
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
class Post extends Model
{
public $incrementing = false;
protected $keyType = 'string';
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
if (empty($model->id)) {
$model->id = Str::ulid();
}
});
}
}
?>