eriksulymosi / eloquent-sqids
Laravel Eloquent 模型的即时 sqids。
0.3.0
2024-08-28 15:43 UTC
Requires
- php: ^8.2
- illuminate/database: ^10|^11
- sqids/sqids: ^0.4.1
Requires (Dev)
- orchestra/testbench: ^8.11
- pestphp/pest: ^2.19
README
在 URL 和列表项中使用 sqids 替代整数 ID 可以更加吸引人和巧妙。更多信息请访问 sqids.org。
此包基于 mtvs 的 eloquent-hashids 包。
Eloquent-Sqids 
此包通过即时编码/解码 sqids 而不是在数据库中持久化它们,为 Laravel Eloquent 模型添加 sqids。因此,不需要另一个数据库列,并且通过使用查询中的主键提高性能。
功能包括
- 为模型生成 sqids
- 将 sqids 解析为模型
- 可以为每个模型自定义 sqid 设置
- 使用 sqids 绑定路由(可选)
安装
使用 Composer 安装包
$ composer require eriksulymosi/eloquent-sqids
此外,将供应商配置文件发布到您的应用程序中(对于依赖项是必要的)
$ php artisan vendor:publish
设置
通过使用 HasSqid
特性提供基本功能,然后可以使用 SqidRouting
添加路由绑定。
use Illuminate\Database\Eloquent\Model; use ErikSulymosi\EloquentSqids\HasSqid; use ErikSulymosi\EloquentSqids\SqidRouting; Class Item extends Model { use HasSqid, SqidRouting; }
使用方法
基础
// Generating the model sqid based on its key $item->sqid(); // Equivalent to the above but with the attribute style $item->sqid; // Finding a model based on the provided sqid or // returning null on failure Item::findBySqid($sqid); // Finding a model based on the provided sqid or // throwing a ModelNotFoundException on failure Item::findBySqidOrFail($sqid); // Decoding a sqid to its equivalent id $item->sqidToId($sqid); // Encoding an id to its equivalent sqid $item->idToSqid($id); // Getting the name of the sqid connection $item->getSqidsConnection();
将 sqid 添加到序列化模型
将其设置为默认值
use Illuminate\Database\Eloquent\Model; use ErikSulymosi\EloquentSqids\HasSqid; class Item extends Model { use HasSqid; /** * The accessors to append to the model's array form. * * @var array */ protected $appends = ['sqid']; }
或指定特定值
return $item->append('sqid')->toJson();
隐式路由绑定
如果您想使用模型的哈希值解析模型的隐式路由绑定,可以在模型中使用 SqidRouting
。
use Illuminate\Database\Eloquent\Model; use ErikSulymosi\EloquentSqids\HasSqid; use ErikSulymosi\EloquentSqids\SqidRouting; class Item extends Model { use HasSqid, SqidRouting; }
它覆盖了 getRouteKeyName()
、getRouteKey()
和 resolveRouteBindingQuery()
以使用 sqids 作为路由键。
它支持 Laravel 的特定路由自定义键功能。
Route::get('/items/{item:slug}', function (Item $item) { return $item; });
自定义默认路由键名称
如果您想默认使用其他字段解析隐式路由绑定,可以覆盖 getRouteKeyName()
以在解析过程中返回字段名称,并覆盖 getRouteKey()
以在链接中返回其值。
use Illuminate\Database\Eloquent\Model; use ErikSulymosi\EloquentSqids\HasSqid; use ErikSulymosi\EloquentSqids\SqidRouting; class Item extends Model { use HasSqid, SqidRouting; public function getRouteKeyName() { return 'slug'; } public function getRouteKey() { return $this->slug; } }
您仍然可以指定特定路由的 sqid。
Route::get('/items/{item:sqid}', function (Item $item) { return $item; });
支持其他 Laravel 隐式路由绑定功能
当使用 SqidRouting
时,您仍然可以使用软删除和子路由绑定。
Route::get('/items/{item}', function (Item $item) { return $item; })->withTrashed(); Route::get('/user/{user}/items/{item}', function (User $user, Item $item) { return $item; })->scopeBindings();