dyrynda/laravel-efficient-uuid

该包已被废弃,不再维护。作者建议使用 dyrynda/laravel-model-uuid 包。

一个扩展 Laravel 迁移的包,用于在数据库中以更有效的方式存储 UUID 字段

安装量: 999,400

依赖: 7

建议者: 2

安全: 0

星标: 305

关注者: 8

分支: 39

开放问题: 6

类型:实用工具

5.0.1 2024-04-23 23:34 UTC

README

Build Status Latest Stable Version Total Downloads License Buy us a tree

简介

此包扩展了给定 MySQL 连接的默认语法文件,添加了一个 efficientUuid 蓝图方法,该方法创建一个 binary(16) 字段。

从 3.0 版本开始,此包不再覆盖 Laravel 的默认 uuid 方法,而是添加了一个单独的 efficientUuid 字段,因为与 Laravel Telescope 存在兼容性问题(#11)。

从 4.0 版本开始,此包使用 自定义转换 来提供到您模型中的转换功能。

注意:此包故意不使用 包发现,因为它会更改 MySQL 架构文件,这是您应该明确启用的。

MySQL、SQLite 和 PostgreSQL 是唯一支持的数据连接类型,尽管我也欢迎任何实现此功能用于其他数据库驱动程序的 pull 请求。

请注意,doctrine/dbal 似乎不支持更改现有的 uuid 字段,这样做会导致您现有的值在任何情况下都被截断。

有关以优化方式存储和操作 UUID 的更多信息,请参阅 此文章

在 Laravel 中使用 UUID 非常简单,结合 laravel-model-uuid。请注意,当使用 laravel-model-uuid 时,如果您不是转换 UUID 或直接调用查询构建器,则在设置数据库上的 UUID 时需要使用 getBytes 方法,否则您的值将被截断。根据您的 MySQL/MariaDB 配置,这可能导致由于严格的设置而导致应用程序错误。有关更多信息,请参阅 (#1)。

此包通过 Composer 安装。要安装,请运行以下命令。

composer require dyrynda/laravel-efficient-uuid

在您的 config/app.php 配置文件中注册服务提供者

'providers' => [
    ...
    Dyrynda\Database\LaravelEfficientUuidServiceProvider::class,
],

迁移

此功能不需要特殊设置,只需在迁移文件中声明一个 uuid 列类型即可。如果您计划对 UUID 列进行查询,建议您对列进行索引,但请避免将其作为主键。

Schema::create('posts', function (Blueprint $table) {
    $table->increments('id');
    $table->efficientUuid('uuid')->unique();
    $table->string('title');
    $table->text('body');
    $table->timestamps();
});

转换

当使用 laravel-model-uuid 时,您需要在模型中添加一个转换,以正确设置和检索 MySQL 数据库中的二进制字段 UUID。

<?php

namespace App;

use Dyrynda\Database\Casts\EfficientUuid;
use Dyrynda\Database\Support\GeneratesUuid;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use GeneratesUuid;

    protected $casts = [
        'uuid' => EfficientUuid::class,
    ];
}

通过 UUID 查询

如果您想通过字符串 UUID 查找记录,您需要使用作用域

Post::whereUuid('25b112a9-499a-4627-9ea0-72cd8694aee3')->first();

验证

如果您想将高效的 UUID 列用作验证策略的一部分,您可以使用 EfficientUuidExists 规则。

use Dyrynda\Database\Rules\EfficientUuidExists;

public function update(Request $request, User $user)
{
    $request->validate([
        // Using the default column name
        'uuid' => [new EfficientUuidExists(Post::class)],

        // Using a custom column name
        'custom_uuid' => [new EfficientUuidExists(Post::class, 'custom_uuid')],
    ]);
}

支持

如果您对这个包有任何一般性问题,请随时在Twitter上联系我。

如果您认为您发现了问题,请使用GitHub问题追踪器报告,或者更好的是,分叉仓库并提交一个pull request。

如果您在使用这个包,我很乐意听听您的想法。谢谢!

Treeware

您可以使用这个包,但如果它进入您的生产环境,您需要为世界买一棵树。

众所周知,应对气候危机并防止气温上升超过1.5摄氏度最好的工具之一就是种树。如果您支持这个包并贡献于Treeware森林,您将为当地家庭创造就业机会并恢复野生动物栖息地。

您可以在这里购买树木

treeware.earth了解更多关于Treeware的信息