Search code examples
javascriptnode.jsknex.js

Edit Knex insert to take array of parameters


I have this Knex update:

NoteTag.createNoteTag = async (noteId, tagId, db) => (
    db.sequelize.knex('note_tags')
      .returning([
        'id',
        'note_id',
        'tag_id',
      ])
      .insert({
        note_id: noteId,
        tag_id: tagId,
      })
  );

I'd like to be able to pass tagId as an array so that multiple tags could be added to a note.

Can I edit the function to do this and if so, how?


Solution

  • Knex's insert supports an array of object as well, so you can iterate over passed tagIds and map them to the insert object.

    NoteTag.createNoteTag = async (noteId, tagIds, db) =>
      db.sequelize
        .knex('note_tags')
        .returning(['id', 'note_id', 'tag_id'])
        .insert(tagIds.map(tagId => ({ node_id: nodeId, tag_id: tagId })));