foodticket/laravel-efficient-uuid

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

安装: 33

依赖者: 0

建议者: 0

安全: 0

星级: 0

关注者: 0

分支: 41

类型:工具

5.0.1 2024-04-15 12:22 UTC

This package is auto-updated.

Last update: 2024-09-15 13:07:19 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是唯一支持的数据连接类型,尽管我欢迎任何将此功能应用于其他数据库驱动程序的拉取请求。

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

有关存储和优化UUID的信息,请参阅此文章

在结合laravel-model-uuid使用UUID时,Laravel的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列作为验证策略的一部分,您可以使用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问题跟踪器报告问题,或者更好的是,分叉存储库并提交一个拉取请求。

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

免费软件

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

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

您可以在这里购买树木

有关Treeware的更多信息,请访问treeware.earth