AdonisJs Model中如何使用Hashids?(Laravel迁移场景)
当然可以!我之前在AdonisJs项目里实现过完全一样的功能,完全能复刻你在Laravel里的用法,步骤很简单,结合你已经安装的adonis-hashids包,按下面的方式来就行:
第一步:确保包已正确配置
首先得确认adonis-hashids已经在项目里注册好:
- 打开
start/app.js,在providers数组中添加:'Adonis/Addons/Hashids' - 同样在
start/app.js的aliases数组里添加别名,方便调用:Hashids: 'Adonis/Addons/Hashids' - 可以在
config/hashids.js里自定义你的salt和hashid长度(如果还没这个文件,运行包的初始化命令生成,一般是adonis configure hashids):module.exports = { salt: '你的自定义盐值', length: 8 // 按需调整hashid的长度 }
第二步:在Model中实现类似Laravel的自动追加hashid
接下来就可以在你的Model里像Laravel那样,添加访问器并把hashid设置为自动追加的属性了:
如果你用的是AdonisJs v4:
const Model = use('Model') const Hashids = use('Hashids') class Menu extends Model { // 对应Laravel的$appends,指定要自动追加的属性 static get $appends() { return ['hashid'] } // 对应Laravel的getHashidAttribute访问器 getHashidAttribute() { return Hashids.encode(this.id) } } module.exports = Menu
如果你用的是AdonisJs v5:
v5用了装饰器语法,写法稍有不同,但逻辑一致:
import { Model, computed } from '@adonisjs/lucid/orm' import Hashids from '@ioc:Adonis/Addons/Hashids' export default class Menu extends Model { // 定义计算属性(对应Laravel的访问器) @computed() get hashid() { return Hashids.encode(this.id) } // 开启序列化时包含额外计算属性,对应Laravel的$appends protected serializeExtras = true }
这样配置之后,当你查询Menu模型返回实例时,对象里就会自动带上hashid属性,和你在Laravel里的效果完全一样啦!
内容的提问来源于stack exchange,提问作者Vinicius Cainelli
相关产品推荐
相关产品推荐

