[Dbix-class] Bug (?) with foreign key / relationship updates

Matt S Trout dbix-class at trout.me.uk
Sun Apr 30 05:42:25 CEST 2006


Gavin Carr wrote:
> On Sat, Apr 29, 2006 at 05:18:54PM +0100, Matt S Trout wrote:
>> Gavin Carr wrote:
>>> There seems to be a bug in .06002 where an update on a foreign key
>>> does not get picked up by the relationship (belongs_to) attached to
>>> that key. Example, from the DBIx::Class::Manual::Example schema:
>>>
>>>   # Update $cd foreign key 
>>>   $cd->set_column('artist', $mj->artistid);
>>>   $cd->update;
>> Err, but you just bypassed the stuff that actually triggers the clear on the 
>> related object -
>>
>> $cd->artist($mj);
>>
>> or
>>
>> $cd->artist($mj->artistid);
>>
>> would both work.
> 
> Ah okay, thanks - I was under the impression that that the column 
> methods and set_column were equivalent (are they in Class::DBI?)

I suspect they are in Class::DBI, since in Class::DBI everything happens in 
the monolithic get/set routines - which are one of the big performance sappers 
as well as being a FPITA to extend.

> Can you explain what the difference is between them then Matt? 

belongs_to on a single column will setup an inflate_column on that attribute, 
at which point ->artist is calling get/set_inflated_column instead. We should 
probably provide get and set methods that figure out which accessor type 
should be used and call it, or some better solution I can't think of at 4am.

> Should that distinction be mentioned in the DBIx::Class::Row docs?

Mmm, or at least a pointer to InflateColumn. Patches welcome :)

-- 
      Matt S Trout       Offering custom development, consultancy and support
   Technical Director    contracts for Catalyst, DBIx::Class and BAST. Contact
Shadowcat Systems Ltd.  mst (at) shadowcatsystems.co.uk for more information

+ Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +



More information about the Dbix-class mailing list