polymorphicBelongsTo
A
polymorphicBelongsTo
relationship is a many-to-one
relationship. This relationship is used when an entity can belong to multiple types of entities. The classic example for this type of relationship is Posts
, Videos
, and Comments
. For instance, a Comment
may belong to a Post
or a Video
.// Comment.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function post() {
return polymorphicBelongsTo( "commentable" );
}
}
The only value passed to
polymorphicBelongsTo
is a prefix
for the polymorphic type. A common convention where is to add able
to the end of the entity name, though this is not automatically done. In our example, this prefix is commentable
. This tells quick to look for a commentable_type
and a commentable_id
column in our Comment
entity. It stores our entity's mapping as the _type
and our entity's primary key value as the _id
.When retrieving a
polymorphicBelongsTo
relationship the _id
is used to retrieve a _type
from the database.The inverse of
polymorphicBelongsTo
is also polymorphicHasMany
. It is important to choose the right relationship for your database structure. hasOne
assumes that the related model has the foreign key for the relationship.// Post.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function comments() {
return polymorphicHasMany( "Comment", "commentable" );
}
}
// Video.cfc
component extends="quick.models.BaseEntity" accessors="true" {
function comments() {
return polymorphicHasMany( "Comment", "commentable" );
}
}
Name | Type | Required | Default | Description |
name | String | false | relationMethodName | The name given to the polymorphic relationship. |
type | String | false | name & "_type" | The column name that defines the type of the polymorphic relationship. |
id | String | false | name & "_id" | The column name that defines the id of the polymorphic relationship. |
localKey | String | [String] | false | related.keyNames() | The column name on the realted entity that is referred to by the foreignKey of the parent entity. |
relationMethodName | String | false | The method name called on the entity to produce this relationship. | The method name called to retrieve this relationship. Uses a stack backtrace to determine by default. DO NOT PASS A VALUE HERE UNLESS YOU KNOW WHAT YOU ARE DOING. |
Returns a polymorphicBelongsTo relationship between this entity and the entity defined by
relationName
.
Last modified 3mo ago