lioneagle / le-utils
这是我创建的包 LeUtils
v3.0
2023-04-28 09:46 UTC
Requires
- php: ^8.1
- barryvdh/laravel-ide-helper: ^2.10
- laravel/framework: ^10.0
Requires (Dev)
- brianium/paratest: ^6.3
- nunomaduro/collision: ^6.0
- orchestra/testbench: ^7.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-28 12:51:40 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); } }