By default an ORM relationship is an array. Using a structure (map for non-ColdFusion programmers) is very easy and provides nice options. Lets start with a simple relationship between of users and addresses.
User.cfc
component persistent="true" {
property name="userId" fieldtype="id" generated="always" generator="native";
property name="name" ormtype="string";
property name="address" fieldtype="one-to-many" cfc="address" fkcolumn="userId" inverse="true";
}
Address.cfc
component persistent="true" {
property name="addressId" fieldtype="id" generated="always" generator="native";
property name="type" ormtype="string";
property name="street" ormtype="string";
property name="city" ormtype="string";
property name="state" ormtype="string";
property name="user" fieldtype="many-to-one" cfc="user";
}
A single user object with two addresses would look like this:
Now, if we want to find out if the user has a work address we need to loop through getAddress(). Thats ok but by converting the relationship to a struct its possible to then use structure functions. Here is the relationship in User.cfc defined to return a structure:
property name="address" fieldtype="one-to-many" cfc="address" fkcolumn="userId" inverse="true"
type="struct" structkeycolumn="type";
A dump of the user object now looks like:
Which means we can use code like this:
<cfdump var="#user.getAddress()["work"]#">
For reference here is the Application.cfc to set up Hibernate/ORM:
component
{
this.name="structsDemo";
this.ormEnabled=true;
this.datasource="cfartgallery";
this.ormsettings = { dbcreate="update" };
}
By: Robert Rawlins 05/27/2011 3:29 AM