@@ -19,16 +19,20 @@ export class TreeRepositoryUtils {
19
19
) : { id : any ; parentId : any } [ ] {
20
20
return rawResults . map ( ( rawResult ) => {
21
21
const joinColumn = metadata . treeParentRelation ! . joinColumns [ 0 ]
22
+ const referencedColumn =
23
+ joinColumn . referencedColumn ?? metadata . primaryColumns [ 0 ]
22
24
// fixes issue #2518, default to databaseName property when givenDatabaseName is not set
23
25
const joinColumnName =
24
26
joinColumn . givenDatabaseName || joinColumn . databaseName
25
- const id =
26
- rawResult [ alias + "_" + metadata . primaryColumns [ 0 ] . databaseName ]
27
+ const referencedColumnName =
28
+ referencedColumn . givenDatabaseName ||
29
+ referencedColumn . databaseName
30
+ const id = rawResult [ alias + "_" + referencedColumnName ]
27
31
const parentId = rawResult [ alias + "_" + joinColumnName ]
28
32
return {
29
33
id : manager . connection . driver . prepareHydratedValue (
30
34
id ,
31
- metadata . primaryColumns [ 0 ] ,
35
+ referencedColumn ,
32
36
) ,
33
37
parentId : manager . connection . driver . prepareHydratedValue (
34
38
parentId ,
@@ -50,15 +54,18 @@ export class TreeRepositoryUtils {
50
54
entity [ childProperty ] = [ ]
51
55
return
52
56
}
53
- const parentEntityId = metadata . primaryColumns [ 0 ] . getEntityValue ( entity )
57
+ const joinColumn = metadata . treeParentRelation ! . joinColumns [ 0 ]
58
+ const referencedColumn =
59
+ joinColumn . referencedColumn ?? metadata . primaryColumns [ 0 ]
60
+ const parentEntityId = referencedColumn . getEntityValue ( entity )
54
61
const childRelationMaps = relationMaps . filter (
55
62
( relationMap ) => relationMap . parentId === parentEntityId ,
56
63
)
57
64
const childIds = new Set (
58
65
childRelationMaps . map ( ( relationMap ) => relationMap . id ) ,
59
66
)
60
67
entity [ childProperty ] = entities . filter ( ( entity ) =>
61
- childIds . has ( metadata . primaryColumns [ 0 ] . getEntityValue ( entity ) ) ,
68
+ childIds . has ( referencedColumn . getEntityValue ( entity ) ) ,
62
69
)
63
70
entity [ childProperty ] . forEach ( ( childEntity : any ) => {
64
71
TreeRepositoryUtils . buildChildrenEntityTree (
@@ -81,15 +88,18 @@ export class TreeRepositoryUtils {
81
88
relationMaps : { id : any ; parentId : any } [ ] ,
82
89
) : void {
83
90
const parentProperty = metadata . treeParentRelation ! . propertyName
84
- const entityId = metadata . primaryColumns [ 0 ] . getEntityValue ( entity )
91
+ const joinColumn = metadata . treeParentRelation ! . joinColumns [ 0 ]
92
+ const referencedColumn =
93
+ joinColumn . referencedColumn ?? metadata . primaryColumns [ 0 ]
94
+ const entityId = referencedColumn . getEntityValue ( entity )
85
95
const parentRelationMap = relationMaps . find (
86
96
( relationMap ) => relationMap . id === entityId ,
87
97
)
88
98
const parentEntity = entities . find ( ( entity ) => {
89
99
if ( ! parentRelationMap ) return false
90
100
91
101
return (
92
- metadata . primaryColumns [ 0 ] . getEntityValue ( entity ) ===
102
+ referencedColumn . getEntityValue ( entity ) ===
93
103
parentRelationMap . parentId
94
104
)
95
105
} )
0 commit comments