red-explosion / laravel-sqids
轻松为您的 Laravel 模型生成类似 Stripe/YouTube 的 ID。
Requires
- php: ^8.2
- ext-mbstring: *
- illuminate/contracts: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- sqids/sqids: ^0.4.1
Requires (Dev)
- laravel/pint: ^1.10
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.6
- pestphp/pest-plugin-arch: ^2.1
- phpstan/phpstan: ^1.10
- red-explosion/pint-config: ^1.1
- spatie/laravel-ray: ^1.32
README
Laravel Sqids
Laravel Sqids(发音为 "squids")允许您轻松为 Laravel 模型生成类似 Stripe/YouTube 的 ID。这些 ID 短小,且保证不会发生冲突。
有关 Sqids 的更多信息,我们建议您访问官方 Sqids(原名 Hashids)网站:https://sqids.org。
安装
要开始使用,请通过 Composer 包管理器安装 Laravel Sqids
composer require red-explosion/laravel-sqids
接下来,您应使用 vendor:publish
artisan 命令发布 Sqids 配置文件。该 sqids
配置文件将放置在您的应用程序 config
目录中
php artisan vendor:publish --provider="RedExplosion\Sqids\SqidsServiceProvider"
用法
使用 Sqids
要使用 Laravel Sqids,只需将 RedExplosion\Sqids\Concerns\HasSqids
特性添加到您的模型中
use RedExplosion\Sqids\Concerns\HasSqids; class User extends Authenticatable { use HasSqids; }
现在,您可以通过调用 sqid
属性来访问模型的 Sqid
$user = User::first(); $sqid = $user->sqid; // use_A3EyoEb2TO
$sqid
的结果将是模型主键的编码值以及模型前缀。
提示
只能编码整数,因此我们建议您与此包结合使用自增 ID。
如果您想为模型设置自定义前缀,您可以在模型上设置 $sqidPrefix
属性值,如下所示
use RedExplosion\Sqids\Concerns\HasSqids; class User extends Authenticatable { use HasSqids; protected string $sqidPrefix = 'user'; } $user = User::first(); $sqid = $user->sqid; // user_A3EyoEb2TO
构建器混合
Laravel Sqids 提供了一些 Eloquent 构建器混合,以使使用 Sqids 更顺畅。
通过 Sqid 查找
要按给定的 Sqid 查找模型,您可以使用 findBySqid
方法
$user = User::findBySqid('use_A3EyoEb2TO');
如果模型不存在,则返回 null
。但是,如果您想抛出异常,则可以使用 findBySqidOrFail
方法代替,该方法在找不到模型时将抛出 ModelNotFoundException
$user = User::findBySqidOrFail('use_invalid');
通过 Sqid 查找
要添加查询的 where 子句,您可以使用 whereSqid
方法
$users = User::query() ->whereSqid('use_A3EyoEb2TO') ->get();
这将检索所有 Sqid/主键与给定值匹配的用户。
通过 Sqid in 查找
要获取所有 Sqid 在给定数组中的模型,您可以使用 whereSqidIn
方法
$users = User::query() ->whereSqidIn('id', ['use_A3EyoEb2TO']) ->get();
这将返回所有 id
在解码的 Sqid 数组中的用户。
通过 Sqid not in 查找
要获取所有 Sqid 不在给定数组中的模型,您可以使用 whereSqidNotIn
方法
$users = User::query() ->whereSqidNotIn('id', ['use_A3EyoEb2TO']) ->get();
这将返回所有 id
不在解码的 Sqid 数组中的用户。
路由模型绑定
Laravel Sqids 默认支持路由模型绑定。只需像平常一样创建一个路由,我们就会处理其余的部分
// GET /users/use_A3EyoEb2TO Route::get('users/{user}', function (User $user) { return "Hello $user->name"; });
从 Sqid 查找模型
Laravel Sqids 最强大的功能之一是能够从给定的 Sqid 解析模型实例。当在应用程序中搜索模型时,这可能非常强大。
use RedExplosion\Sqids\Model; $model = Model::find('use_A3EyoEb2TO');
当我们运行以下代码时,$user
将是给定 Sqid 的 User
模型实例。如果没有找到模型,则返回 null
。
如果您想抛出异常,则可以使用 findOrFail
方法,这将抛出 ModelNotFoundException
实例
use RedExplosion\Sqids\Model; $model = Model::findOrFail('use_A3EyoEb2TO');
重要
为了使用此功能,您必须为您的 Sqids 使用前缀。
测试
composer test
变更日志
请参阅变更日志以获取有关最近变更的更多信息。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
如果您发现安全漏洞,请通过ben@redexplosion.co.uk发送电子邮件给Ben Sherred。所有安全漏洞都将得到及时处理。
致谢
许可证
Laravel Sqids 是开源软件,许可协议为MIT 协议。