HasManyRelateOperation.js 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. const normalizeIds = require('../../utils/normalizeIds');
  2. const RelateOperation = require('../../queryBuilder/operations/RelateOperation');
  3. class HasManyRelateOperation extends RelateOperation {
  4. onAdd(builder, args) {
  5. this.input = args[0];
  6. this.ids = normalizeIds(args[0], this.relation.relatedModelClass.getIdRelationProperty(), {
  7. arrayOutput: true
  8. });
  9. return true;
  10. }
  11. queryExecutor(builder) {
  12. const patch = {};
  13. const ownerProp = this.relation.ownerProp;
  14. const relatedProp = this.relation.relatedProp;
  15. const idColumn = builder.fullIdColumnFor(this.relation.relatedModelClass);
  16. for (let i = 0, l = relatedProp.size; i < l; ++i) {
  17. relatedProp.patch(patch, i, ownerProp.getProp(this.owner, i));
  18. }
  19. return this.relation.relatedModelClass
  20. .query()
  21. .childQueryOf(builder)
  22. .patch(patch)
  23. .copyFrom(builder, builder.constructor.WhereSelector)
  24. .whereInComposite(idColumn, this.ids)
  25. .modify(this.relation.modify);
  26. }
  27. }
  28. module.exports = HasManyRelateOperation;