@strapi/database 5.3.0 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entity-manager/index.d.ts.map +1 -1
- package/dist/entity-manager/morph-relations.d.ts +12 -0
- package/dist/entity-manager/morph-relations.d.ts.map +1 -1
- package/dist/entity-manager/relations-orderer.d.ts +1 -0
- package/dist/entity-manager/relations-orderer.d.ts.map +1 -1
- package/dist/index.js +223 -48
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +224 -49
- package/dist/index.mjs.map +1 -1
- package/dist/metadata/relations.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAE5D,cAAc,SAAS,CAAC;AA2LxB,eAAO,MAAM,mBAAmB,OAAQ,QAAQ,KAAG,aA0yClD,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="lodash" />
|
|
1
2
|
import type { Knex } from 'knex';
|
|
2
3
|
import type { Database } from '..';
|
|
3
4
|
import type { MorphJoinTable } from '../types';
|
|
@@ -9,5 +10,16 @@ export declare const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate: (rows
|
|
|
9
10
|
db: Database;
|
|
10
11
|
transaction?: Knex.Transaction;
|
|
11
12
|
}) => Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Encoding utilities for polymorphic relations.
|
|
15
|
+
*
|
|
16
|
+
* In some scenarios is useful to encode both the id & __type of the relation
|
|
17
|
+
* to have a unique identifier for the relation. (e.g. relations reordering)
|
|
18
|
+
*/
|
|
19
|
+
export declare const encodePolymorphicId: (id: number | string, __type: string) => string;
|
|
20
|
+
export declare const encodePolymorphicRelation: import("lodash").CurriedFunction2<{
|
|
21
|
+
idColumn: any;
|
|
22
|
+
typeColumn: any;
|
|
23
|
+
}, any, any>;
|
|
12
24
|
export {};
|
|
13
25
|
//# sourceMappingURL=morph-relations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morph-relations.d.ts","sourceRoot":"","sources":["../../src/entity-manager/morph-relations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"morph-relations.d.ts","sourceRoot":"","sources":["../../src/entity-manager/morph-relations.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,UAAU,CAAC;AAEzD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AA8BtC,eAAO,MAAM,oDAAoD,yEAQ5D;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,cAAc,CAAC;IAC1B,EAAE,EAAE,QAAQ,CAAC;IACb,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC;CAChC,kBAoCF,CAAC;AAEF;;;;;GAKG;AAEH,eAAO,MAAM,mBAAmB,OAAQ,MAAM,GAAG,MAAM,UAAU,MAAM,WAEtE,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;YAkBpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relations-orderer.d.ts","sourceRoot":"","sources":["../../src/entity-manager/relations-orderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,UAAU,IAAI;IACZ,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QAAC,GAAG,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"relations-orderer.d.ts","sourceRoot":"","sources":["../../src/entity-manager/relations-orderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,UAAU,IAAI;IACZ,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QAAC,GAAG,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,WAAY,SAAQ,IAAI;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,gBAAgB,eAAgB,IAAI,EAAE,eAAc,IAAI,EAAE,iCA0G/D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,QAAA,MAAM,gBAAgB,yDACX,SAAS,EAAE,YACV,MAAM,SAAS,eACZ,MAAM,SAAS,WACnB,OAAO;0BAuDQ,IAAI,GAAG,IAAI,EAAE;uBAMhB,IAAI,GAAG,IAAI,EAAE;;IAqBhC;;OAEG;;CAgBN,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4910,6 +4910,25 @@ const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate = async (rows, {
|
|
|
4910
4910
|
await createQueryBuilder(joinTable.name, db).delete().where({ $or: orWhere }).transacting(trx).execute();
|
|
4911
4911
|
}
|
|
4912
4912
|
};
|
|
4913
|
+
const encodePolymorphicId = (id, __type) => {
|
|
4914
|
+
return `${id}:::${__type}`;
|
|
4915
|
+
};
|
|
4916
|
+
const encodePolymorphicRelation = _.curry(({ idColumn, typeColumn }, relation) => {
|
|
4917
|
+
const newRelation = {
|
|
4918
|
+
...relation,
|
|
4919
|
+
[idColumn]: encodePolymorphicId(relation[idColumn], relation[typeColumn])
|
|
4920
|
+
};
|
|
4921
|
+
if (relation.position) {
|
|
4922
|
+
const { before, after } = relation.position;
|
|
4923
|
+
const __type = relation.position.__type || relation.__type;
|
|
4924
|
+
newRelation.position = { ...relation.position };
|
|
4925
|
+
if (before)
|
|
4926
|
+
newRelation.position.before = encodePolymorphicId(before, __type);
|
|
4927
|
+
if (after)
|
|
4928
|
+
newRelation.position.after = encodePolymorphicId(after, __type);
|
|
4929
|
+
}
|
|
4930
|
+
return newRelation;
|
|
4931
|
+
});
|
|
4913
4932
|
const getDocumentSiblingIdsQuery = (tableName, id) => {
|
|
4914
4933
|
const models = Array.from(strapi.db.metadata.values());
|
|
4915
4934
|
const isContentType = models.find((model) => {
|
|
@@ -5096,7 +5115,10 @@ const sortConnectArray = (connectArr, initialArr = [], strictSort = true) => {
|
|
|
5096
5115
|
if (!adjacentRelId || !relationInInitialArray[adjacentRelId] && !mapper[adjacentRelId]) {
|
|
5097
5116
|
needsSorting = true;
|
|
5098
5117
|
}
|
|
5099
|
-
|
|
5118
|
+
const existingRelation = mapper[relation.id];
|
|
5119
|
+
const hasNoComponent = existingRelation && !("__component" in existingRelation);
|
|
5120
|
+
const hasSameComponent = existingRelation && existingRelation.__component === relation.__component;
|
|
5121
|
+
if (existingRelation && (hasNoComponent || hasSameComponent)) {
|
|
5100
5122
|
throw new InvalidRelationError(
|
|
5101
5123
|
`The relation with id ${relation.id} is already connected. You cannot connect the same relation twice.`
|
|
5102
5124
|
);
|
|
@@ -5237,7 +5259,7 @@ const toId = (value) => {
|
|
|
5237
5259
|
if (isValidId(value)) {
|
|
5238
5260
|
return value;
|
|
5239
5261
|
}
|
|
5240
|
-
throw new Error(`Invalid id, expected a string or integer, got ${value}`);
|
|
5262
|
+
throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);
|
|
5241
5263
|
};
|
|
5242
5264
|
const toIds = (value) => _.castArray(value || []).map(toId);
|
|
5243
5265
|
const isValidId = (value) => _.isString(value) || _.isInteger(value);
|
|
@@ -5272,7 +5294,8 @@ const toAssocs = (data) => {
|
|
|
5272
5294
|
connect: toIdArray(data?.connect).map((elm) => ({
|
|
5273
5295
|
id: elm.id,
|
|
5274
5296
|
position: elm.position ? elm.position : { end: true },
|
|
5275
|
-
__pivot: elm.__pivot ?? {}
|
|
5297
|
+
__pivot: elm.__pivot ?? {},
|
|
5298
|
+
__type: elm.__type
|
|
5276
5299
|
})),
|
|
5277
5300
|
disconnect: toIdArray(data?.disconnect)
|
|
5278
5301
|
};
|
|
@@ -5547,23 +5570,33 @@ const createEntityManager = (db) => {
|
|
|
5547
5570
|
const { joinTable } = attribute;
|
|
5548
5571
|
const { joinColumn, morphColumn } = joinTable;
|
|
5549
5572
|
const { idColumn, typeColumn, typeField = "__type" } = morphColumn;
|
|
5550
|
-
if (_.isEmpty(cleanRelationData.set)) {
|
|
5573
|
+
if (_.isEmpty(cleanRelationData.set) && _.isEmpty(cleanRelationData.connect)) {
|
|
5551
5574
|
continue;
|
|
5552
5575
|
}
|
|
5553
|
-
const
|
|
5576
|
+
const dataset = cleanRelationData.set || cleanRelationData.connect || [];
|
|
5577
|
+
const rows = dataset.map((data2, idx) => ({
|
|
5554
5578
|
[joinColumn.name]: id,
|
|
5555
5579
|
[idColumn.name]: data2.id,
|
|
5556
5580
|
[typeColumn.name]: data2[typeField],
|
|
5557
5581
|
..."on" in joinTable && joinTable.on || {},
|
|
5558
5582
|
...data2.__pivot || {},
|
|
5559
5583
|
order: idx + 1
|
|
5560
|
-
}))
|
|
5561
|
-
|
|
5562
|
-
|
|
5563
|
-
|
|
5564
|
-
|
|
5565
|
-
|
|
5566
|
-
|
|
5584
|
+
}));
|
|
5585
|
+
const orderMap = relationsOrderer(
|
|
5586
|
+
[],
|
|
5587
|
+
morphColumn.idColumn.name,
|
|
5588
|
+
"order",
|
|
5589
|
+
true
|
|
5590
|
+
// Always make a strict connect when inserting
|
|
5591
|
+
).connect(
|
|
5592
|
+
// Merge id & __type to get a single id key
|
|
5593
|
+
dataset.map(encodePolymorphicRelation({ idColumn: "id", typeColumn: "__type" }))
|
|
5594
|
+
).get().reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx }), {});
|
|
5595
|
+
rows.forEach((row) => {
|
|
5596
|
+
const rowId = row[morphColumn.idColumn.name];
|
|
5597
|
+
const rowType = row[morphColumn.typeColumn.name];
|
|
5598
|
+
const encodedId = encodePolymorphicId(rowId, rowType);
|
|
5599
|
+
row.order = orderMap[encodedId];
|
|
5567
5600
|
});
|
|
5568
5601
|
await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
|
|
5569
5602
|
continue;
|
|
@@ -5663,25 +5696,67 @@ const createEntityManager = (db) => {
|
|
|
5663
5696
|
const { joinTable } = targetAttribute;
|
|
5664
5697
|
const { joinColumn, morphColumn } = joinTable;
|
|
5665
5698
|
const { idColumn, typeColumn } = morphColumn;
|
|
5699
|
+
const hasSet = !_.isEmpty(cleanRelationData.set);
|
|
5700
|
+
const hasConnect = !_.isEmpty(cleanRelationData.connect);
|
|
5701
|
+
const hasDisconnect = !_.isEmpty(cleanRelationData.disconnect);
|
|
5702
|
+
if (!hasSet && (hasConnect || hasDisconnect)) {
|
|
5703
|
+
const idsToDelete = [
|
|
5704
|
+
...cleanRelationData.disconnect || [],
|
|
5705
|
+
...cleanRelationData.connect || []
|
|
5706
|
+
];
|
|
5707
|
+
if (!_.isEmpty(idsToDelete)) {
|
|
5708
|
+
const where = {
|
|
5709
|
+
$or: idsToDelete.map((item) => {
|
|
5710
|
+
return {
|
|
5711
|
+
[idColumn.name]: id,
|
|
5712
|
+
[typeColumn.name]: uid,
|
|
5713
|
+
[joinColumn.name]: item.id,
|
|
5714
|
+
...joinTable.on || {},
|
|
5715
|
+
field: attributeName
|
|
5716
|
+
};
|
|
5717
|
+
})
|
|
5718
|
+
};
|
|
5719
|
+
await this.createQueryBuilder(joinTable.name).delete().where(where).transacting(trx).execute();
|
|
5720
|
+
}
|
|
5721
|
+
if (hasConnect) {
|
|
5722
|
+
const start = await this.createQueryBuilder(joinTable.name).where({
|
|
5723
|
+
[idColumn.name]: id,
|
|
5724
|
+
[typeColumn.name]: uid,
|
|
5725
|
+
...joinTable.on || {},
|
|
5726
|
+
...data.__pivot || {}
|
|
5727
|
+
}).max("order").first().transacting(trx).execute();
|
|
5728
|
+
const startOrder = start?.max || 0;
|
|
5729
|
+
const rows = (cleanRelationData.connect ?? []).map((data2, idx) => ({
|
|
5730
|
+
[joinColumn.name]: data2.id,
|
|
5731
|
+
[idColumn.name]: id,
|
|
5732
|
+
[typeColumn.name]: uid,
|
|
5733
|
+
...joinTable.on || {},
|
|
5734
|
+
...data2.__pivot || {},
|
|
5735
|
+
order: startOrder + idx + 1,
|
|
5736
|
+
field: attributeName
|
|
5737
|
+
}));
|
|
5738
|
+
await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
|
|
5739
|
+
}
|
|
5740
|
+
continue;
|
|
5741
|
+
}
|
|
5666
5742
|
await this.createQueryBuilder(joinTable.name).delete().where({
|
|
5667
5743
|
[idColumn.name]: id,
|
|
5668
5744
|
[typeColumn.name]: uid,
|
|
5669
5745
|
...joinTable.on || {},
|
|
5670
5746
|
field: attributeName
|
|
5671
5747
|
}).transacting(trx).execute();
|
|
5672
|
-
if (
|
|
5673
|
-
|
|
5748
|
+
if (hasSet) {
|
|
5749
|
+
const rows = (cleanRelationData.set ?? []).map((data2, idx) => ({
|
|
5750
|
+
[joinColumn.name]: data2.id,
|
|
5751
|
+
[idColumn.name]: id,
|
|
5752
|
+
[typeColumn.name]: uid,
|
|
5753
|
+
...joinTable.on || {},
|
|
5754
|
+
...data2.__pivot || {},
|
|
5755
|
+
order: idx + 1,
|
|
5756
|
+
field: attributeName
|
|
5757
|
+
}));
|
|
5758
|
+
await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
|
|
5674
5759
|
}
|
|
5675
|
-
const rows = cleanRelationData.set?.map((data2, idx) => ({
|
|
5676
|
-
[joinColumn.name]: data2.id,
|
|
5677
|
-
[idColumn.name]: id,
|
|
5678
|
-
[typeColumn.name]: uid,
|
|
5679
|
-
...joinTable.on || {},
|
|
5680
|
-
...data2.__pivot || {},
|
|
5681
|
-
order: idx + 1,
|
|
5682
|
-
field: attributeName
|
|
5683
|
-
}));
|
|
5684
|
-
await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
|
|
5685
5760
|
}
|
|
5686
5761
|
continue;
|
|
5687
5762
|
}
|
|
@@ -5692,29 +5767,129 @@ const createEntityManager = (db) => {
|
|
|
5692
5767
|
const { joinTable } = attribute;
|
|
5693
5768
|
const { joinColumn, morphColumn } = joinTable;
|
|
5694
5769
|
const { idColumn, typeColumn, typeField = "__type" } = morphColumn;
|
|
5695
|
-
|
|
5696
|
-
|
|
5697
|
-
|
|
5698
|
-
|
|
5699
|
-
|
|
5770
|
+
const hasSet = !_.isEmpty(cleanRelationData.set);
|
|
5771
|
+
const hasConnect = !_.isEmpty(cleanRelationData.connect);
|
|
5772
|
+
const hasDisconnect = !_.isEmpty(cleanRelationData.disconnect);
|
|
5773
|
+
if (!hasSet && (hasConnect || hasDisconnect)) {
|
|
5774
|
+
const idsToDelete = [
|
|
5775
|
+
...cleanRelationData.disconnect || [],
|
|
5776
|
+
...cleanRelationData.connect || []
|
|
5777
|
+
];
|
|
5778
|
+
const rowsToDelete = [
|
|
5779
|
+
...(cleanRelationData.disconnect ?? []).map((data2, idx) => ({
|
|
5780
|
+
[joinColumn.name]: id,
|
|
5781
|
+
[idColumn.name]: data2.id,
|
|
5782
|
+
[typeColumn.name]: data2[typeField],
|
|
5783
|
+
..."on" in joinTable && joinTable.on || {},
|
|
5784
|
+
...data2.__pivot || {},
|
|
5785
|
+
order: idx + 1
|
|
5786
|
+
})),
|
|
5787
|
+
...(cleanRelationData.connect ?? []).map((data2, idx) => ({
|
|
5788
|
+
[joinColumn.name]: id,
|
|
5789
|
+
[idColumn.name]: data2.id,
|
|
5790
|
+
// @ts-expect-error TODO
|
|
5791
|
+
[typeColumn.name]: data2[typeField],
|
|
5792
|
+
..."on" in joinTable && joinTable.on || {},
|
|
5793
|
+
...data2.__pivot || {},
|
|
5794
|
+
order: idx + 1
|
|
5795
|
+
}))
|
|
5796
|
+
];
|
|
5797
|
+
const adjacentRelations = await this.createQueryBuilder(joinTable.name).where({
|
|
5798
|
+
$or: [
|
|
5799
|
+
{
|
|
5800
|
+
[joinColumn.name]: id,
|
|
5801
|
+
[idColumn.name]: {
|
|
5802
|
+
$in: _.compact(
|
|
5803
|
+
cleanRelationData.connect?.map(
|
|
5804
|
+
(r) => r.position?.after || r.position?.before
|
|
5805
|
+
)
|
|
5806
|
+
)
|
|
5807
|
+
}
|
|
5808
|
+
},
|
|
5809
|
+
{
|
|
5810
|
+
[joinColumn.name]: id,
|
|
5811
|
+
order: this.createQueryBuilder(joinTable.name).max("order").where({ [joinColumn.name]: id }).where(joinTable.on || {}).transacting(trx).getKnexQuery()
|
|
5812
|
+
}
|
|
5813
|
+
]
|
|
5814
|
+
}).where(joinTable.on || {}).transacting(trx).execute();
|
|
5815
|
+
if (!_.isEmpty(idsToDelete)) {
|
|
5816
|
+
const where = {
|
|
5817
|
+
$or: idsToDelete.map((item) => {
|
|
5818
|
+
return {
|
|
5819
|
+
[idColumn.name]: item.id,
|
|
5820
|
+
[typeColumn.name]: item[typeField],
|
|
5821
|
+
[joinColumn.name]: id,
|
|
5822
|
+
...joinTable.on || {}
|
|
5823
|
+
};
|
|
5824
|
+
})
|
|
5825
|
+
};
|
|
5826
|
+
await this.createQueryBuilder(joinTable.name).delete().where(where).transacting(trx).execute();
|
|
5827
|
+
await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rowsToDelete, {
|
|
5828
|
+
uid,
|
|
5829
|
+
attributeName,
|
|
5830
|
+
joinTable,
|
|
5831
|
+
db,
|
|
5832
|
+
transaction: trx
|
|
5833
|
+
});
|
|
5834
|
+
}
|
|
5835
|
+
if (hasConnect) {
|
|
5836
|
+
const dataset = cleanRelationData.connect || [];
|
|
5837
|
+
const rows = dataset.map((data2) => ({
|
|
5838
|
+
[joinColumn.name]: id,
|
|
5839
|
+
[idColumn.name]: data2.id,
|
|
5840
|
+
[typeColumn.name]: data2[typeField],
|
|
5841
|
+
...joinTable.on || {},
|
|
5842
|
+
...data2.__pivot || {},
|
|
5843
|
+
field: attributeName
|
|
5844
|
+
}));
|
|
5845
|
+
const orderMap = relationsOrderer(
|
|
5846
|
+
// Merge id & __type to get a single id key
|
|
5847
|
+
adjacentRelations.map(
|
|
5848
|
+
encodePolymorphicRelation({
|
|
5849
|
+
idColumn: idColumn.name,
|
|
5850
|
+
typeColumn: typeColumn.name
|
|
5851
|
+
})
|
|
5852
|
+
),
|
|
5853
|
+
idColumn.name,
|
|
5854
|
+
"order",
|
|
5855
|
+
cleanRelationData.options?.strict
|
|
5856
|
+
).connect(
|
|
5857
|
+
// Merge id & __type to get a single id key
|
|
5858
|
+
dataset.map(encodePolymorphicRelation({ idColumn: "id", typeColumn: "__type" }))
|
|
5859
|
+
).getOrderMap();
|
|
5860
|
+
rows.forEach((row) => {
|
|
5861
|
+
const rowId = row[idColumn.name];
|
|
5862
|
+
const rowType = row[typeColumn.name];
|
|
5863
|
+
const encodedId = encodePolymorphicId(rowId, rowType);
|
|
5864
|
+
row.order = orderMap[encodedId];
|
|
5865
|
+
});
|
|
5866
|
+
await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
|
|
5867
|
+
}
|
|
5700
5868
|
continue;
|
|
5701
5869
|
}
|
|
5702
|
-
|
|
5703
|
-
|
|
5704
|
-
|
|
5705
|
-
|
|
5706
|
-
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
5711
|
-
|
|
5712
|
-
|
|
5713
|
-
|
|
5714
|
-
|
|
5715
|
-
|
|
5716
|
-
|
|
5717
|
-
|
|
5870
|
+
if (hasSet) {
|
|
5871
|
+
await this.createQueryBuilder(joinTable.name).delete().where({
|
|
5872
|
+
[joinColumn.name]: id,
|
|
5873
|
+
...joinTable.on || {}
|
|
5874
|
+
}).transacting(trx).execute();
|
|
5875
|
+
const rows = (cleanRelationData.set ?? []).map((data2, idx) => ({
|
|
5876
|
+
[joinColumn.name]: id,
|
|
5877
|
+
[idColumn.name]: data2.id,
|
|
5878
|
+
[typeColumn.name]: data2[typeField],
|
|
5879
|
+
field: attributeName,
|
|
5880
|
+
...joinTable.on || {},
|
|
5881
|
+
...data2.__pivot || {},
|
|
5882
|
+
order: idx + 1
|
|
5883
|
+
}));
|
|
5884
|
+
await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {
|
|
5885
|
+
uid,
|
|
5886
|
+
attributeName,
|
|
5887
|
+
joinTable,
|
|
5888
|
+
db,
|
|
5889
|
+
transaction: trx
|
|
5890
|
+
});
|
|
5891
|
+
await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
|
|
5892
|
+
}
|
|
5718
5893
|
continue;
|
|
5719
5894
|
}
|
|
5720
5895
|
if ("joinColumn" in attribute && attribute.joinColumn && attribute.owner) {
|
|
@@ -6139,7 +6314,7 @@ const QUERIES = {
|
|
|
6139
6314
|
FROM :tableName:
|
|
6140
6315
|
LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:
|
|
6141
6316
|
WHERE document_id IS NULL
|
|
6142
|
-
GROUP BY :tableName:.id, :joinColumn:
|
|
6317
|
+
GROUP BY :tableName:.id, :joinTableName:.:joinColumn:
|
|
6143
6318
|
LIMIT 1;
|
|
6144
6319
|
`,
|
|
6145
6320
|
params
|
|
@@ -6153,7 +6328,7 @@ const QUERIES = {
|
|
|
6153
6328
|
FROM :tableName:
|
|
6154
6329
|
LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:
|
|
6155
6330
|
WHERE document_id IS NULL
|
|
6156
|
-
GROUP BY :tableName:.id, :joinColumn:
|
|
6331
|
+
GROUP BY :tableName:.id, :joinTableName:.:joinColumn:
|
|
6157
6332
|
LIMIT 1;
|
|
6158
6333
|
`,
|
|
6159
6334
|
params
|
|
@@ -6167,7 +6342,7 @@ const QUERIES = {
|
|
|
6167
6342
|
FROM :tableName:
|
|
6168
6343
|
LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:
|
|
6169
6344
|
WHERE document_id IS NULL
|
|
6170
|
-
GROUP BY :joinColumn:
|
|
6345
|
+
GROUP BY :joinTableName:.:joinColumn:
|
|
6171
6346
|
LIMIT 1;
|
|
6172
6347
|
`,
|
|
6173
6348
|
params
|