Post// Team.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function latestPost() {
return hasOneThrough( [ "members", "posts" ] )
.orderByDesc( "publishedDate" );
}
function members() {
return hasMany( "User" );
}
}// User.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function posts() {
return hasMany( "Post" );
}
function team() {
return belongsTo( "Team" );
}
}// Post.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function author() {
return belongsTo( "Post" );
}
}hasOneThrough( [ "members", "posts" ] );
+----------------+---------------------------+----------------+
| Current Entity | Relationship Method Names | Related Entity |
+================+===========================+================+
| Team | members | User |
+----------------+---------------------------+----------------+
| User | posts | Post |
+----------------+---------------------------+----------------+// Office.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function latestPost() {
return hasOneThrough( [ "teams", "members", "posts" ] )
.orderByDesc( "publishedDate" );
}
function teams() {
return hasMany( "Team" );
}
}// Team.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function members() {
return hasMany( "User" );
}
function office() {
return belongsTo( "Office" );
}
}// User.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function team() {
return belongsTo( "Team" );
}
function posts() {
return hasMany( "Post" );
}
}// Post.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function author() {
return belongsTo( "User" );
}
}hasOneThrough( [ "teams", "members", "posts" ] )
+----------------+---------------------------+----------------+
| Current Entity | Relationship Method Names | Related Entity |
+================+===========================+================+
| Office | teams | Team |
+----------------+---------------------------+----------------+
| Team | members | User |
+----------------+---------------------------+----------------+
| User | posts | Post |
+----------------+---------------------------+----------------+// Team.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function latestPost() {
return hasOneThrough( [ "members", "posts" ] )
.orderByDesc( "publishedDate" )
.withDefault();
}
function members() {
return hasMany( "User" );
}
}// Team.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function latestPost() {
return hasOneThrough( [ "members", "posts" ] )
.orderByDesc( "publishedDate" )
.withDefault( {
"title": "Your next great post!"
} );
}
function members() {
return hasMany( "User" );
}
}