Соответствие API DataLoader только с использованием SQL
Один из примеров использования DataLoader с Knex показывает следующее:
user: new DataLoader(ids => db.table('users')
.whereIn('id', ids).select()
.then(rows => ids.map(id => rows.find(x => x.id === id)))),
Карта существует так, что ключи в массиве ключей всегда совпадают с объектами в массиве результатов, например, если отсутствует объект с идентификатором 2:
array of keys: [1,2,3]
array of results: [object1, undefined, object3]
Если вы оставили карту, вы получите несбалансированный ввод / вывод (например, при запросе отсутствующих идентификаторов):
array of keys: [1,2,3]
array of results [object1, object3]
Есть ли способ сделать map
немного с чистого SQL?
1 ответ
Это означает, что в базе данных нет строки с идентификатором 2, поэтому whereIn
не возвращает более 2 строк. Нет никакого способа сделать это в чистом SQL с whereIn
, С несколькими подзапросами это можно сделать, но это было бы плохим решением.