1234567891011121314151617181920212223242526272829303132333435363738 |
- const normalizeIds = require('../../../utils/normalizeIds');
- const RelateOperation = require('../../../queryBuilder/operations/RelateOperation');
- class ManyToManyRelateOperation extends RelateOperation {
- onAdd(builder, args) {
- this.input = args[0];
- this.ids = normalizeIds(args[0], this.relation.relatedProp);
- return true;
- }
- queryExecutor(builder) {
- const ownerId = this.relation.ownerProp.getProps(this.owner);
- const joinModels = this.relation.createJoinModels(ownerId, this.ids);
- const joinModelClass = this.relation.getJoinModelClass(builder.knex());
- for (let i = 0, l = joinModels.length; i < l; ++i) {
- joinModels[i] = joinModelClass.fromJson(joinModels[i]);
- }
- return joinModelClass
- .query()
- .childQueryOf(builder)
- .runBefore((result, builder) =>
- this.relation.executeJoinTableBeforeInsert(joinModels, builder.context(), null)
- )
- .insert(joinModels)
- .copyFrom(builder, /returning/)
- .runAfter(models => {
- if (Array.isArray(this.input)) {
- return models;
- } else {
- return models[0];
- }
- });
- }
- }
- module.exports = ManyToManyRelateOperation;
|