Соответствие 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, С несколькими подзапросами это можно сделать, но это было бы плохим решением.

Другие вопросы по тегам