lioneagle/le-utils

这是我创建的包 LeUtils

v3.0 2023-04-28 09:46 UTC

README

安装

Composer

$ composer require lioneagle/le-utils

UUIDs

本包提供了用于为 Eloquent 模型添加支持 uuid 列的实用工具。

用法

在您的模型中,确保它实现了 Lioneagle\LeUtils\Contracts\Uuidable 接口。

使用 Lioneagle\LeUtils\Traits\HasUuid 来默认满足此接口。

<?php

namespace Lioneagle\LeUtils\Tests\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Lioneagle\LeUtils\Contracts\Uuidable;
use Lioneagle\LeUtils\Traits\HasUuid;

class User extends Model implements Uuidable
{
    use HasUuid;

    protected $fillable = ['name'];

    public function posts(): HasMany
    {
        return $this->hasMany(Post::class);
    }
}

现在您可以静态查询模型,或将其作为查询的一部分;

$uuid = '942e28b5-63e3-4475-8d96-4f04ab0f627f';

$user = User::uuid($uuid);
$user = User::query()->uuid($uuid);

您也可以使用 uuid() 方法查询关系;

$post = User::posts()->uuid($uuid);

自定义构建器

默认情况下,HasUuid 特性将创建一个自定义构建器,该构建器将返回用于新查询。返回的构建器必须实现 Lioneagle\LeUtils\Contracts\UuidBuilderInterface

您可以使用自己的构建器,但它必须实现相同的接口。您可以使用 Lioneagle\LeUtils\Traits\BuilderUuidScope 特性来实现所需接口方法。

<?php

namespace Lioneagle\LeUtils\Query;

use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Lioneagle\LeUtils\Contracts\UuidBuilderInterface;
use Lioneagle\LeUtils\Traits\BuilderUuidScope;

class CustomBuilder extends EloquentBuilder implements UuidBuilderInterface
{
    use BuilderUuidScope;

    public function whereActive()
    {
        return $this->where('active', 1);
    }
}

然后在您的模型 newEloquentBuilder 方法中简单地返回这个构建器。

class User extends Model implements Uuidable
{
    use HasUuid;

    protected $fillable = ['name'];

    public function posts(): HasMany
    {
        return $this->hasMany(Post::class);
    }

    public function newEloquentBuilder($query): UuidBuilderInterface
    {
        return new CustomBuilder($query);
    }
}