red-explosion/laravel-sqids

轻松为您的 Laravel 模型生成类似 Stripe/YouTube 的 ID。

v1.2.2 2024-06-01 12:12 UTC

This package is auto-updated.

Last update: 2024-08-31 12:55:10 UTC


README

Laravel Sqids Logo

Laravel Sqids

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

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 协议