UNPKG

objection

Version:
48 lines (35 loc) 1.24 kB
import InsertOperation from '../../queryBuilder/operations/InsertOperation'; import {after} from '../../utils/promiseUtils'; export default class HasManyInsertOperation extends InsertOperation { constructor(name, opt) { super(name, opt); this.relation = opt.relation; this.owner = opt.owner; } call(builder, args) { const retVal = super.call(builder, args); for (let i = 0, lm = this.models.length; i < lm; ++i) { const model = this.models[i]; for (let j = 0, lp = this.relation.relatedProp.length; j < lp; ++j) { const relatedProp = this.relation.relatedProp[j]; const ownerProp = this.relation.ownerProp[j]; model[relatedProp] = this.owner[ownerProp]; } } return retVal; } onAfterQuery(builder, inserted) { const maybePromise = super.onAfterQuery(builder, inserted); const isOneToOne = this.relation.isOneToOne(); const relName = this.relation.name; const owner = this.owner; return after(maybePromise, inserted => { if (isOneToOne) { owner[relName] = inserted[0] || null; } else { owner[relName] = this.relation.mergeModels(owner[relName], inserted); } return inserted; }); } }