如何在Prisma中对深度嵌套表执行findMany筛选查询?
在Prisma中筛选关联特定分类标题的Offer
根据你提供的数据库Schema,Offer和Category通过OfferCategory中间表构成多对多关系。要筛选出关联标题为「Fruits」的分类的Offer,可以通过嵌套的where条件实现,具体代码如下:
基础筛选示例
const offersInFruits = await prisma.offer.findMany({ where: { categories: { // 只要Offer关联的分类中有任意一个匹配条件就会被选中 some: { category: { title: "Fruits" } } } }, // 可选:如果需要返回关联的分类详情,添加include include: { categories: { include: { category: true } } } });
处理分类标题为Null的情况
由于Schema中Category.title是可选字段(String?),如果需要避免匹配到标题为null的分类,可以添加非空校验:
const offersInFruits = await prisma.offer.findMany({ where: { categories: { some: { category: { title: { equals: "Fruits", not: null } } } } } });
筛选多个分类标题
如果需要同时匹配多个分类标题(比如「Fruits」和「Vegetables」),可以使用in操作符:
const offersInTargetCategories = await prisma.offer.findMany({ where: { categories: { some: { category: { title: { in: ["Fruits", "Vegetables"], not: null } } } } } });
关键说明
some关键字表示:只要当前Offer关联的OfferCategory记录中,存在任意一条对应的Category满足标题条件,该Offer就会被纳入结果集。- 如果需要严格匹配所有关联分类都符合条件,可以将
some替换为every(根据业务需求调整)。
内容的提问来源于stack exchange,提问作者Ray Cobain
相关产品推荐
相关产品推荐

