首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AdonisJS / Parse在返回前加入了ORM模型

AdonisJS / Parse在返回前加入了ORM模型
EN

Stack Overflow用户
提问于 2022-08-03 21:46:58
回答 1查看 86关注 0票数 0

我正在尝试将我的原始查询转换为使用在ORM和QueryBuilder系统中构建的AdonisJS,目前在我的原始查询中,我从不同的表中构建对象,以便在将不同对象类型传递到前端时获得更好的组织。例如,在创建一个角色对象的情况下,获取用户可能看起来如下所示

代码语言:javascript
运行
复制
SELECT
  u.id,
  json_build_object(
    'name', role.name
  ) AS role
FROM users u
LEFT JOIN roles role
  ON role.id = u.role_id

如果用户ORM看起来像

代码语言:javascript
运行
复制
export default class User extends BaseModel {
  public static table = TABLES.USERS

  @column({ isPrimary: true })
  public id: number

  @column()
  public unique_id: string

  @column()
  public email: string

  @column({
    serializeAs: null,
  })
  public first_name: string
  @column({
    serializeAs: null,
  })
  public last_name: string
  @computed()
  public get name() {
    return {
      first: this.first_name,
      last: this.last_name,
      full: `${this.first_name} ${this.last_name}`,
    }
  }

  @column()
  public active: boolean

  @hasOne(() => Role)
  public role: HasOne<typeof Role>
}

而ORM所扮演的角色

代码语言:javascript
运行
复制
export default class Role extends BaseModel {
  public static table = TABLES.ROLES

  @column({ isPrimary: true })
  public id: number

  @column()
  public name: string

  @column()
  public options: string[]
  @column()
  public permissions: string[]
  @column()
  public widgets: string[]

  @column()
  public locked: boolean

  @belongsTo(() => User)
  public user: BelongsTo<typeof User>
}

是否有任何方法从用户ORM/QueryBuilder中自动加入链接到用户的角色?我已经查看了Adonis文档,特别是有关关系的文档,但我看到的大多数内容是,除了为表编写联接语句之外,在本例中,除了为表编写联接语句之外,您还可以在事实之后获得相关表中的角色,但不能在查询本身中获得。如果它必须来自一个连接,那么是否有一种方法可以使用角色ORM来处理类似于await User.all()工作方式的字段,或者它必须是一个自定义的选择?

不确定是否有必要,但我目前正在使用Adonis Core v5.8.3、Adonis Lucid v18.0.1和Adonis Repl v3.1.11,如果这有帮助的话。如果我问的问题看起来很复杂,就让我知道哪里需要澄清,我会澄清的。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-04 00:43:18

我发现角色ORM上的hasMany装饰器和用户ORM上的belongsTo装饰器的组合将两者连接在一起,然后使用preload查询函数允许角色自动连接到用户。

角色ORM中的User属性

代码语言:javascript
运行
复制
@hasMany(() => User, {
  foreignKey: 'role_id',
})
public users: HasMany<typeof User>

用户ORM中的角色属性

代码语言:javascript
运行
复制
@column({
  serializeAs: null
})
public role_id: number
@belongsTo(() => Role, {
  foreignKey: 'role_id',
})
public role: BelongsTo<typeof Role>

提取逻辑

代码语言:javascript
运行
复制
const users = await User.query().preload('role').paginate(params.page, params.limit)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73228157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档