Skip to content

Commit 3557e84

Browse files
committed
fix(BaseEntity): More ACF compatibility fixes for parallel eager loading
I can't believe I'm using `cfthread` in 2025. 😭
1 parent a46298e commit 3557e84

File tree

1 file changed

+31
-8
lines changed

1 file changed

+31
-8
lines changed

models/BaseEntity.cfc

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,15 +1399,38 @@ component accessors="true" {
13991399
boolean force = false,
14001400
boolean parallel = false
14011401
) {
1402-
var entity = this;
1403-
arrayEach( arrayWrap( arguments.name ), ( n ) => {
1404-
if ( force || !isRelationshipLoaded( n ) ) {
1405-
var relationship = invoke( entity, n );
1406-
relationship.setRelationMethodName( n );
1407-
assignRelationship( n, relationship.get() );
1402+
arguments.name = arrayWrap( arguments.name );
1403+
if ( arguments.name.len() > 1 && arguments.parallel ) {
1404+
var threadNames = [];
1405+
for ( var n in arguments.name ) {
1406+
var threadName = "#n#_#replace( createUUID(), "-", "", "all" )#";
1407+
threadNames.append( threadName );
1408+
cfthread(
1409+
action = "run",
1410+
name = "#threadName#",
1411+
relationshipName = "#n#",
1412+
entity = this
1413+
) {
1414+
var relationship = invoke( attributes.entity, attributes.relationshipName );
1415+
relationship.setRelationMethodName( attributes.relationshipName );
1416+
assignRelationship( attributes.relationshipName, relationship.get() );
1417+
}
1418+
}
1419+
cfthread(
1420+
action = "join",
1421+
name = "#threadNames.toList()#",
1422+
timeout = "#60 * 1000#"
1423+
);
1424+
} else {
1425+
for ( var n in arguments.name ) {
1426+
if ( arguments.force || !isRelationshipLoaded( n ) ) {
1427+
var relationship = invoke( this, n );
1428+
relationship.setRelationMethodName( n );
1429+
assignRelationship( n, relationship.get() );
1430+
}
14081431
}
1409-
}, arguments.parallel );
1410-
return entity;
1432+
}
1433+
return this;
14111434
}
14121435

14131436
/**

0 commit comments

Comments
 (0)