emadadly / laravel-uuid
laravel uuid 是一个基于 Laravel 的简单、自动的 UUID 生成器,适用于任何模型。
Requires
- php: ^7.0|^8.0|^8.1
- illuminate/support: 6.*|7.*|8.*|9.*|^10.0|^11.0
Requires (Dev)
- laravel/framework: 6.*|7.*|8.*|9.*|^10.0|^11.0
- phpunit/phpunit: ~6.0|7.0.*|8.0.*|9.0.*|^9.5.10|^10.5
- squizlabs/php_codesniffer: ^3.6
README
基于 Laravel 5.5 及以上版本的简单、自动 UUID 生成器,使用此包时,对于每个新条目,您将获得以下功能
- 自动生成
uuid
。 - 自动将其分配到数据库中的
uuid
字段。 - 基于
uuid
方法轻松查找。
什么是 UUID?
通用唯一标识符(UUID)是一个用于在计算机系统中标识信息的 128 位数字。它是一个由 32 个字母数字字符和其中四个连字符组成的 36 个字符长标识符。例如:123E4567-E89b-12D3-A456-426655440000
,其中包含字母和数字,可以唯一地标识某个对象。您可以在此处了解更多信息:这里
有哪些好处?
-
在分布式系统中,您可以非常有信心主键永远不会冲突。
-
在构建大型应用时,自动递增主键可能并不理想。
-
它使得复制变得简单(与 int 相比,int 使得复制非常困难)
-
足够安全,不会显示用户是通过 ID 获取信息的,例如
https://example.com/user/25/settings
安装
要开始使用,请要求此包
- 通过 Composer
composer require emadadly/laravel-uuid
- 通过 composer.json 文件
将以下内容添加到项目的 composer.json
文件的 require
部分。
"emadadly/laravel-uuid": "1.*",
运行 composer update 下载包
composer update
最后,您还需要添加 ServiceProvider
Laravel 5.5 及以上
使用包自动发现功能,无需编辑 config/app.php 文件。
Laravel 5.4 及以下
您需要将 ServiceProvider 添加到 config/app.php
文件中,如下所示
'providers' => [ ... Emadadly\LaravelUuid\LaravelUuidServiceProvider::class, ],
您还可以发布配置文件
php artisan vendor:publish --provider="Emadadly\LaravelUuid\LaravelUuidServiceProvider"
并设置您的默认_uuid_column 设置,如果您有全局默认值。
我们的包默认假设列名为 uuid
。如果您想用默认的 id
替换它,请按照以下步骤进行。
使用方法
迁移
当使用迁移时,应将 uuid
添加为列类型,并设置名称与 config/uuid.php
文件中的名称相同。
$table->uuid('uuid');
它将在我们的数据库模式中创建名为 uuid 的列和一个 char(36),以便接收 Uuid。
简单地,模式看起来像这样。
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->uuid('uuid'); .... .... $table->timestamps(); });
模型
在任意模型中使用此 trait。
要设置一个使用 Uuid 的模型,只需使用 Uuids trait
use Illuminate\Database\Eloquent\Model; use Emadadly\LaravelUuid\Uuids; class ExampleModel extends Model { use Uuids; .... }
控制器
当您创建使用 Uuids 的模型的新实例时,我们的包将自动添加 Uuid。
// 'Uuid' will automatically generate and assign id field. $model = ExampleModel::create(['name' => 'whatever']);
此外,当在控制器中使用 show、update 或 delete 方法时,通过 ExampleModel::uuid()
范围方法实现它非常容易
public function show($uuid) { $example = ExampleModel::uuid($uuid); return response()->json(['example' => $example]); }
用 UUID 替换默认 ID
如果您想用 uuid 替换默认的 id 列,请确保在 config/uuid.php
文件中将 'default_uuid_column' => 'uuid',
设置为 'default_uuid_column' => 'id',
。
在您的迁移过程中,将id列的类型从increments
更改为uuid
,并手动添加主键。注意:这也适用于模型关系列,如果相关模型使用UUID,则列类型应反映这一点
Schema::create('users', function (Blueprint $table) { $table->uuid('id')->unique(); $table->primary('id'); .... // related model uses UUID, must change type $table->uuid('model_id'); .... $table->timestamps(); });
然后在模型中,您需要将自增标志设置为false。
use Illuminate\Database\Eloquent\Model; use Emadadly\LaravelUuid\Uuids; class ExampleModel extends Model { use Uuids; .... /** * Indicates if the IDs are auto-incrementing. * * @var bool */ public $incrementing = false; .... }
支持
如果您在使用此包时遇到一般问题,请随时在Twitter上联系我。
如果您认为您发现了问题,请使用GitHub问题跟踪器报告,或者更好的做法是分支仓库并提交拉取请求。
如果您在使用此包,我很想听听您的想法。谢谢!
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。