12345678910111213141516171819202122232425262728293031323334353637 |
- const normalizeIds = require('../../utils/normalizeIds');
- const RelateOperation = require('../../queryBuilder/operations/RelateOperation');
- class BelongsToOneRelateOperation extends RelateOperation {
- onAdd(builder, args) {
- this.input = args[0];
- this.ids = normalizeIds(args[0], this.relation.relatedProp, { arrayOutput: true });
- if (this.ids.length > 1) {
- throw this.relation.createError('can only relate one model to a BelongsToOneRelation');
- }
- return true;
- }
- queryExecutor(builder) {
- const patch = {};
- const ownerProp = this.relation.ownerProp;
- const idColumn = builder.fullIdColumnFor(this.relation.ownerModelClass);
- for (let i = 0, l = ownerProp.size; i < l; ++i) {
- const relatedValue = this.ids[0][i];
- ownerProp.setProp(this.owner, i, relatedValue);
- ownerProp.patch(patch, i, relatedValue);
- }
- return this.relation.ownerModelClass
- .query()
- .childQueryOf(builder)
- .copyFrom(builder, builder.constructor.WhereSelector)
- .patch(patch)
- .whereComposite(idColumn, this.owner.$id());
- }
- }
- module.exports = BelongsToOneRelateOperation;
|