如何在 Prisma 中查询关联非空数据(筛选至少拥有一条关联记录的模型)
技术百科
心靈之曲
发布时间:2026-01-26
浏览: 次 本文详解如何使用 prisma 的 `some` 关系过滤器,精准查询拥有至少一条关联记录的父模型(如 subcategory),避免误用 `not: null` 导致的语法错误。
在 Prisma 中,当你希望「只获取那些关联了至少一条子记录的父记录」时(例如:仅返回存在菜单的子分类),不能对关系字段(如 menu: Menu[])使用 where: { id: { not: null } }——这不仅逻辑错误(数组本身不可能为

正确做法是使用 Prisma 提供的关系过滤操作符 some。它专为“存在性检查”设计:menu: { some: {} } 表示「该 SubCategory 至少关联了一条 Menu 记录」,无需指定具体条件,空对象 {} 即表示“任意匹配”。
✅ 正确示例代码如下:
const topCategories = await this.prisma.subCategory.findMany({
where: {
menu: {
some: {}, // ✅ 关键:筛选出 menu 数组非空(长度 ≥ 1)的 SubCategory
},
},
include: {
menu: true, // ✅ 同时加载关联的 menu 数据(可选,按需保留)
},
orderBy: {
id: 'desc',
},
take: 50,
});⚠️ 注意事项:
- some: {} 与 some: { id: { gt: 0 } } 等价(因 id 为主键且非空),但前者更简洁、语义更清晰;
- 若需进一步筛选关联数据(如只包含已启用的菜单),可在 some 内添加条件:some: { isActive: true };
- 不要混淆 include 和 where:include 控制响应中是否携带关联数据,where(含 some)控制查询结果的主模型范围;
- every(全部满足)、none(完全不满足)也是常用关系过滤符,适用于不同业务场景。
总结:Prisma 的关系过滤必须通过 some/every/none 显式表达存在性逻辑,而非尝试对数组字段做 null 判断。掌握 some: {} 是实现“非空关联查询”的标准且高效方式。
# ai
# 可选
# 当你
# 能为
# 适用于
# 可在
# 而非
# 能对
# 专为
# 只会
# go
# 对象
# 报错
# NULL
# include
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么设置右键刷新选项_Windows11
- Windows 11无法安全删除U盘提示设备正在使
- Win10系统映像怎么恢复 Win10使用系统映像
- 如何在Golang中实现服务熔断与限流_Golan
- 如何在Mac上搭建Golang开发环境_使用Hom
- Go语言中正确反序列化多个同级XML元素为结构体切
- Win11怎么关闭搜索历史 Win11清除搜索框最
- Win11怎么关闭边缘滑动手势_Windows11
- 如何使用Golang构建基础消息队列模拟_Gola
- Win11相机打不开提示错误怎么修_相机权限开启与
- Win11怎么关闭系统声音_Win11系统提示音静
- c++怎么操作redis数据库_c++ hired
- Win11如何更改用户账户文件夹名称 Win11修
- MAC的“接续互通”功能无法使用怎么办_MAC检查
- c# 如何用c#实现一个支持优先级的任务队列
- 如何在 Django 中安全修改用户密码而不使会话
- Win11怎么设置夜间模式_Windows11显示
- 如何在 PHP 单元测试中正确模拟带方法的图像处理
- Windows系统被恶意软件破坏后的恢复策略_错误
- Windows10电脑怎么设置电源按钮_Win10
- 如何使用正则表达式批量替换重复的“-”模式为固定字
- Windows10无法识别USB设备描述符请求失败
- Windows如何拦截2345弹窗广告_Windo
- PHP主流架构怎么监控运行状态_工具推荐【操作】
- MAC如何修改默认应用程序_MAC文件后缀关联设置
- Win11怎么关闭资讯和兴趣_Windows11任
- Win11怎么更改输入法顺序_Win11调整语言首
- Windows 10自带杀毒软件在哪_Window
- Go 中 := 短变量声明的类型推导机制详解
- PHP主流架构怎么集成Redis缓存_配置步骤【方
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- Win11如何更改任务栏颜色 Win11自定义任务
- Windows10系统怎么查看系统版本_Win10
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸
- Win11怎么关闭开机声音_Win11系统启动提示
- Win11怎么开启远程桌面连接_Windows11
- php怎么操作Redis_Redis扩展连接与基本
- 如何使用Golang反射将map转换为struct
- c++的STL算法库find怎么用 在容器中查找指
- PHP接收参数值为空怎么办_判断和处理空参数方法说
- Windows10如何更改盘符名称_Win10重命
- Windows怎样关闭Edge新标签页广告_Win
- Python路径拼接规范_跨平台处理说明【指导】
- Windows10系统怎么查看CPU温度_Win1
- Python深度学习实战教程_神经网络模型构建与训
- Win11怎么关闭用户账户控制UAC_Window
- 本地php环境出现502错误_nginx或apac
- Win11怎么设置默认邮件客户端 Win11修改M
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- Win11开始菜单打不开_修复Windows 11

QQ客服