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
相关产品推荐
相关产品推荐

