Drizzle ORM关联表findMany按嵌套字段排序问题
如何用Drizzle ORM按关联表字段排序查询结果?
你当前在嵌套的document配置里添加orderBy的方式无法实现顶层结果集的排序——嵌套的orderBy仅作用于关联子查询的内部排序,而这里每个usersToDocumentsTable条目对应唯一的document,所以这种设置完全无效。
要实现按关联document的latestUpdatedAt对结果整体排序,需要在findMany的根配置级别添加orderBy,通过关联表的关联引用直接访问document的字段:
import { eq, desc } from "drizzle-orm"; import { db } from "@/db"; import { usersTable, documentsTable, usersToDocumentsTable } from "@/db/schema"; export const getDocuments = async (userId: string) => { "use server"; const documents = await db.query.usersToDocumentsTable.findMany({ where: eq(usersToDocumentsTable.userId, userId), with: { document: { columns: { displayId: true, title: true, latestText: true, pinnedMessageId: true, retrivedMessage: true, latestUpdatedAt: true, }, }, }, // 根级别配置排序,关联document的latestUpdatedAt字段 orderBy: [desc(usersToDocumentsTable.document.latestUpdatedAt)], }); return documents; };
关键说明
- 根级别的
orderBy直接控制返回的usersToDocumentsTable条目排序顺序 - 使用
desc()会让更新时间最新的聊天室排在最前面,若需按最早更新排序则替换为asc() - 通过
usersToDocumentsTable.document直接访问关联的documentsTable字段,是Drizzle ORM关联查询的原生语法特性
内容的提问来源于stack exchange,提问作者susanliu
相关产品推荐
相关产品推荐

