1

将 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]

有没有办法map用纯 SQL 来做这件事?

4

1 回答 1

0

这意味着数据库没有 id 为 2 的行,因此whereIn不会返回超过 2 行。在纯 SQL 中没有办法做到这一点whereIn。可以使用多个子查询来完成,但这将是一个糟糕的解决方案。

于 2019-08-16T16:52:59.267 回答