Как вставить дополнительные значения в таблицу "многие ко многим" с помощью Objection.js?

У меня есть следующие таблицы

foo     foo_bar    bar
---     -------    ---
id      foo_id     id
        bar_id     data
        num
        desc

foo  bar
---  ---
1    (to be inserted)
2

Я хочу вставить данные в bar связывание вставленной записи с существующим элементом на foo таблица с таблицей отношений "многие ко многим" foo_bar,

Видимо, я могу сделать это с:

await Bar.query()
  .allowInsert('[foo]')
  .upsertGraph({ data: 'todo', [{ id: 1 }]}, { relate: true });

мой Bar модель имеет

static get relationMappings() {
  return {
    foo: {
      join: {
        extra: ['num', 'desc'],
        from: 'bar.id',
        through: {
          from: 'foo_bar.bar_id',
          to: 'foo_bar.foo_id',
        },
        to: 'foo.id',
      },
      modelClass: Foo,
      relation: Model.ManyToManyRelation,
    },
  };
}

Но как вставить значения в num а также desc из foo_bar? Как мне вставить значения в эту среднюю таблицу?

1 ответ

Из свойства docs: extra: Столбцы, перечисленные здесь, автоматически присоединяются к связанным объектам, когда они выбираются и автоматически записываются в таблицу объединения вместо связанной таблицы при вставке.

Вы упомянули дополнительное свойство в вашей модели со столбцами num и desc, поэтому вы можете поместить их непосредственно в upsertGraph следующим образом:

await Bar.query() .allowInsert('[foo]') .upsertGraph({ data: 'todo', num: 3, desc: 'bla', [{ id: 1 }]}, { relate: true });

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