将DataLoader与Knex一起使用的示例之一显示了以下内容:
user: new DataLoader(ids => db.table('users')
.whereIn('id', ids).select()
.then(rows => ids.map(id => rows.find(x => x.id === id)))),
这里有地图,因此键数组中的键始终与结果数组中的对象匹配,例如如果ID为2的对象丢失:
array of keys: [1,2,3]
array of results: [object1, undefined, object3]
如果您忽略了地图,则会得到不平衡的输入/输出(例如,在查询缺少的ID时):
array of keys: [1,2,3]
array of results [object1, object3]
有什么方法可以使用纯SQL来做map
位吗?
答案 0 :(得分:0)
这意味着数据库没有ID为2的行,因此whereIn
返回的行不超过2行。在纯SQL中使用whereIn
无法做到这一点。使用多个子查询可以完成此操作,但这将是一个糟糕的解决方案。