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

Drizzle ORM中`with`关联查询失效,无法嵌套获取userCredential

解决Drizzle一对一关联嵌套查询不生效的问题

你的问题出在userTable到userCredentialTable的关系定义上——你只声明了one(userCredentialTable),但没有明确指定关联字段映射,导致TypeScript无法识别这个嵌套关系,自然不会在User类型里生成userCredential字段。

修正后的Schema代码

修改userToUserCredentialRelations的定义,补充关联字段配置:

export const userToUserCredentialRelations = relations(userTable, ({ one }) => ({
  userCredential: one(userCredentialTable, {
    fields: [userTable.id],
    references: [userCredentialTable.userId],
  }),
}))

为什么要这么改?

Drizzle的一对一关系需要明确双方的关联字段:

  • 从userTable的角度,用自身的id字段关联
  • 对应userCredentialTable里的userId字段

之前的写法只告诉Drizzle两个表是一对一,但没说具体通过哪个字段关联,TypeScript类型系统无法推导嵌套结构,所以查询时用.with('userCredential')不会报错,但实际不会返回关联数据,类型里也看不到这个字段。

验证查询

修改后,你的查询代码(比如db.query.userTable.findFirst({ with: { userCredential: true } }))就能正确返回包含userCredential的嵌套数据,同时TypeScript也会识别这个字段。

内容的提问来源于stack exchange,提问作者Alan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:54:58