Prisma实现多条件地理权限筛选的问题及解决方案
在Prisma中实现基于地理位置权限的商品筛选
我需要实现基于地理位置的商品销售权限筛选,这个需求用SQL左连接能搞定,但一开始不知道怎么用Prisma实现。
表结构与权限规则
有一个和商品是1对多关联的restrictions表,结构如下:
Item | Geo | Allow
数据示例
- 商品1允许在美国(US)和德国(DE)销售,数据如下:
1 | US | 1 1 | DE | 1 - 商品1仅允许在美国销售(其余地区禁止),数据则为:
1 | GB | 0 1 | CA | 0
权限规则
Allow=1:明确指定该地理区域允许销售Allow=0:仅列表里的地理区域禁止销售,其他未列出的区域默认允许
我的需求是根据客户所在地区(比如US),筛选出允许销售的商品。
初始尝试的问题
一开始写的Prisma代码只能筛选出geo=US且allow=1的商品,满足不了全部需求:
where: { type : 'active', restrictions: { some: { geo: "US", allow: 1, }, }, },
实际需要的是同时满足两个OR条件:
- 该商品没有
geo=US且allow=0的限制记录 - 该商品存在
allow=1且geo≠US的允许记录
最终解决方案
后来搞清楚了Prisma中OR条件的正确写法,修正后的代码如下:
where: { type: "active", OR: [ { NOT: { restrictions: { some: { country: "US", allow: 0 } } }, }, { restrictions: { some: { allow: 1, country: { not: "US" } } }, }, ], },
内容的提问来源于stack exchange,提问作者Radium Chris
相关产品推荐
相关产品推荐

