Dave - 

Let's say you have a User who hasOne address. That is, the address has a
field userId which is a foreign key back to the User's userId field.  

To configure this correctly you would add an object to your reactor xml that
looks like this:

<object name="User">
        <hasOne name="Address">
                <relate from="userId" to="userId" />
        </hasOne>
</object>

Or, perhaps, that your User actually has an addressId field that is foreign
key to your Address' addressId field.in that case your config would look
like this:

<object name="User">
        <hasOne name="Address">
                <relate from="addressId" to="addressId" />
        </hasOne>
</object>

In both cases this will cause reactor to generate a method
getAddressRecord() on your UserRecord.  The getAddressRecord() method
returns an AddressRecord.

If you wanted to get really crazy you could make a reference back to the
user from the address by adding another hasOne relationship back:

<object name="Address">
        <hasOne name="User">
                <relate from="addressId" to="addressId" />
        </hasOne>
</object>

Or...


<object name="Address">
        <hasOne name="User">
                <relate from="userId" to="userId" />
        </hasOne>
</object>

... depending on your database configuration.

Hope that helps.

Doug Hughes

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf
Of David A. Cheslow PhD
Sent: Saturday, March 18, 2006 1:39 PM
To: [email protected]
Subject: Re: [Reactor For CF] Support for one-to-one relations?

Thanks for responding Brian.  I finally got a chance to download the  
latest version and checkout your suggestions.  I'm afraid I still  
only see support for one-to-many and many-to-many relations.

The samples show Customer and Address in a one-to-many relation  
rather than a one-to-one relation.  Easy enough to get the Address  
for a Customer.  A bit harder to get a Customer for a given Address.

Imagine that the Customer-Address really is a one-to-one relation.   
The way I am doing it now (which is not at all terrible) is to setup  
a one-to-many (just like the sample) and then add a getRecord()  
function to Address which calls getIterator() and then gets the first  
and only Customer from the Iterator.  As I said, it's not terrible...  
just a lot of unnecessary CPU cycles spent.

Am I missing something?

=dave=



On Mar 14, 2006, at 5:48 AM, Brian Hegeman wrote:

> There is definitely support for one-to-one relationships. Check  
> Doug's excellent documentation included in the download -- page 46  
> has some examples of using <hasOne...> connections. Basically it  
> works just like you've suggested but check the samples.
>
> brian
>
> David A. Cheslow PhD wrote:
>> Hi again;
>>
>> Still loving reactor Doug!  Keep up the great work!
>>
>> Support for Many-to-Many and One-to-Many relations seems pretty  
>> complete... noticeably missing is support for One-to-One relations.
>>
>> Only one of the tables involved in a one-to-one relation needs to  
>> contain a foreign key to the other table.   Relational algebra  
>> does not help us choose which table gets the extra field, but  
>> domain knowledge usually makes it obvious.  Adding a "back pointer  
>> foreign key" from the other table creates ugly problems with  
>> cascades and creates a lot of unnecessary work.  Knowing that the  
>> relation is one-to-one allows the "back reference" to be  
>> calculated... just as it is for the "many" side of a one-to-many  
>> relation.
>>
>> Let's say that 'Person' as a one-to-one relation with 'Address'.   
>> We store a foreign key to the Address table in the Person table  
>> (we could just as easily store a foreign key to Person in  
>> Address... but that makes less sense, for some reason).  Reactor  
>> allows us to call getAddressRecord() on a PersonRecord... but it  
>> does not allow us to call getPersonRecord() on an AddressRecord,  
>> even though all the needed information is available.
>>
>> Syntactically, this could be supported the same way that it is for  
>> Many-to-Many relationships.  For example, something like:
>>
>>         <object name="person">
>>             <hasOne name="address" alias="homeaddress">
>>                 <relate from="homeaddressId" to="addressId" />
>>             </hasOne>
>>         </object>
>>
>>         <object name="address">
>>             <hasOne name="person" alias="whereILive">
>>                 <link name="person"  from="addressid"   
>> to="homeaddressid" />
>>             </hasOne>
>>         </object>
>> There are two patterns in which I frequently use one-to-one  
>> relations: when a sub-element repeats in an object (e.g. person  
>> has-one 'homeaddress' AND person has-one 'workaddress') and for  
>> storing object hierarchies in a RDB (each instance has a one-to- 
>> one relation with an instance of it's superclass).
>>
>> Adding this functionality outside of reactor is trivial, but it  
>> would also be trivial to add it into reactor...
>>
>> Just food for thought, love the reactor,
>>
>> =dave=
>>
>>
>>
>> -- Reactor for ColdFusion Mailing List -- [email protected]
>> -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/
>>
>>
>>
>
>
> -- Reactor for ColdFusion Mailing List -- [email protected]
> -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/
>
>
>
>


 

-- Reactor for ColdFusion Mailing List -- [email protected]
-- Archives at http://www.mail-archive.com/reactor%40doughughes.net/



 

-- Reactor for ColdFusion Mailing List -- [email protected]
-- Archives at http://www.mail-archive.com/reactor%40doughughes.net/


Reply via email to