You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AdonisJs Model中如何使用Hashids?(Laravel迁移场景)

当然可以!我之前在AdonisJs项目里实现过完全一样的功能,完全能复刻你在Laravel里的用法,步骤很简单,结合你已经安装的adonis-hashids包,按下面的方式来就行:

第一步:确保包已正确配置

首先得确认adonis-hashids已经在项目里注册好:

  1. 打开start/app.js,在providers数组中添加:
    'Adonis/Addons/Hashids'
    
  2. 同样在start/app.js的aliases数组里添加别名,方便调用:
    Hashids: 'Adonis/Addons/Hashids'
    
  3. 可以在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:25:42