yieldstudio / eloquent-public-id
Eloquent Public ID Trait for Laravel 9 及以上版本。
1.0.3
2024-07-22 10:29 UTC
Requires
- php: ^8.0|^8.1|^8.2
- illuminate/database: ^9|^10.0|^11.0
- illuminate/support: ^9|^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- laravel/pint: ^1.16
- orchestra/testbench: ^7.0|^8.0|^9.0.2
- pestphp/pest: ^1.21|^2.0
- phpunit/phpunit: ^9.4|^10.5|^11.0
README
功能介绍
公共ID的目的是保持一个完整且可增量的ID,同时向前端暴露UUID,这可以方便出于安全考虑。
此包提供两个功能
- 允许模型管理公共ID
- 允许FormRequest轻松将公共ID转换为ID
安装
您可以通过composer安装此包
composer require yieldstudio/eloquent-public-id
HasPublicId 特性
此特性将使您的模型能够获得处理公共ID所需的所有操作的好处。
一旦安装了包,将公共ID字段添加到您的表中
Schema::create('users', function (Blueprint $table) { // .. $table->uuid('public_id')->index()->unique(); // .. });
下一步,将HasPublicId特性应用于您的模型
<?php declare(strict_types=1); namespace App\Models; use Illuminate\Database\Eloquent\Model; use YieldStudio\EloquentPublicId\HasPublicId; class User extends Model { use HasPublicId; }
现在可以使用了 :)
⚠️ 默认情况下,该特性将ID字段标记为隐藏字段并保护公共ID。
该特性为您的模型添加了一些方法,如下所示
更改公共ID列的名称
如果您的迁移中选择了除public_id之外的另一个字段名,您必须使用getPublicIdName
函数指定此字段。
<?php declare(strict_types=1); namespace App\Models; use Illuminate\Database\Eloquent\Model; use YieldStudio\EloquentPublicId\HasPublicId; class User extends Model { use HasPublicId; public function getPublicIdName(): string { return 'uuid'; } }
更改公共ID的生成
公共ID在模型在数据库中创建后会自动生成。如果您想修改此字段的生成值,必须将generatePublicId
函数添加到您的模型中
<?php declare(strict_types=1); namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; use YieldStudio\EloquentPublicId\HasPublicId; class User extends Model { use HasPublicId; public function generatePublicId(): string { return Str::random(); } }
ConvertPublicId 特性
允许在FormRequest中将公共ID转换为ID(在验证之前)。
<?php declare(strict_types=1); namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use YieldStudio\EloquentPublicId\ConvertPublicId; class CreatePostRequest extends FormRequest { use ConvertPublicId; protected array $publicIdsToConvert = [ 'category_id' => Category::class, 'tags.*' => Tag::class, 'postable_id' => 'postable_type', // You can reference another field as model class in case of morph relationship 'suggestions' => [ // Nesting fields is allowed '*' => [ 'post_id' => Post::class, 'tags.*' => Tag::class, 'postable_id' => 'postable_type', ] ] ];
单元测试
要运行测试,只需运行composer install
和composer test
。
联系我们
Yield Studio 的团队随时欢迎您,并使每次互动都成为一次非凡的体验。您可以通过此链接联系我们。
变更日志
请参阅变更日志获取有关最近更改的更多信息。
贡献
请参阅贡献指南获取详细信息。
安全性
如果您发现了关于安全性的错误,请通过contact@yieldstudio.fr而不是使用问题跟踪器来发送邮件。
鸣谢
许可
MIT 许可证 (MIT)。请参阅许可证文件获取更多信息。