Hasura数组关系过滤问题:日期筛选为空时如何显示全部用户(含无订单用户)
解决方案
核心问题在于:当whereUsers中存在CustomerOrders键(哪怕值是空对象{}),Hasura会自动筛选出存在关联CustomerOrders记录的用户,因此必须在无日期筛选时完全移除这个键,而不是设为空对象。
调整变量构建逻辑
修改whereUsers的生成方式,仅当fromDate和toDate都存在时,才将CustomerOrders的过滤条件加入其中:
variables: { order_byUsers: { creationDate: 'desc' }, whereUsers: { deleted_at: { _is_null: true }, // 仅当有日期筛选时,才添加CustomerOrders过滤条件 ...(fromDate && toDate ? { CustomerOrders: { completion_date: { _gte: fromDate, _lte: toDate } } } : {}) }, // 如果需要同时过滤返回的用户订单列表,可保留此变量;否则可移除 whereCustomerOrders: fromDate && toDate ? { completion_date: { _gte: fromDate, _lte: toDate } } : undefined, offsetUsers: state.pageSize * state.page, limitUsers: state.pageSize }
关键说明
- 无日期筛选时,
whereUsers仅包含deleted_at的条件,不会关联CustomerOrders,因此会返回所有未删除的用户(包括没有订单的用户)。 - 若需要在返回用户数据时同步过滤该用户的订单列表,可保留
whereCustomerOrders变量,无日期时设为undefined而非空对象,避免不必要的关联判定。 User_aggregate使用同一$whereUsers变量,统计结果会自动匹配筛选逻辑:有日期时统计符合订单条件的用户数,无日期时统计所有未删除用户数。
内容的提问来源于stack exchange,提问作者Evaldas
相关产品推荐
相关产品推荐

