12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- const RelationInsertOperation = require('../../RelationInsertOperation');
- const { after } = require('../../../utils/promiseUtils');
- class ManyToManyInsertOperation extends RelationInsertOperation {
- onAdd(builder, args) {
- const retVal = super.onAdd(builder, args);
- this.relation.omitExtraProps(this.models);
- return retVal;
- }
- onAfter1(builder, ret) {
- const maybePromise = super.onAfter1(builder, ret);
- const owner = this.owner;
- return after(maybePromise, inserted => {
- const ownerId = this.relation.ownerProp.getProps(owner);
- const joinModels = this.relation.createJoinModels(ownerId, inserted);
- const joinModelClass = this.relation.getJoinModelClass(builder.knex());
- for (let i = 0, l = joinModels.length; i < l; ++i) {
- joinModels[i] = joinModelClass.fromJson(joinModels[i]);
- }
- if (this.assignResultToOwner) {
- owner.$appendRelated(this.relation, inserted);
- }
- // Insert the join rows to the join table.
- return joinModelClass
- .query()
- .childQueryOf(builder)
- .runBefore((result, builder) =>
- this.relation.executeJoinTableBeforeInsert(joinModels, builder.context(), null)
- )
- .insert(joinModels)
- .return(inserted);
- });
- }
- }
- module.exports = ManyToManyInsertOperation;
|