[CDBI] has_many caching

Daniel Williams danielw at staff.iinet.net.au
Thu Apr 13 08:23:37 BST 2006


New to the list and relatively new to class::dbi.

I have had a look around and can't seem to find any example of what I'm
trying to achieve.

I have an Event Table, and an Entry Table.

Event is a 1 to many relationship with Entry.

Therefore we use for event:
ChimeFault::Event->has_many(entries => 'ChimeFault::Entry', 'faultid');
And for entry:
ChimeFault::Entry->has_a(faultid => 'ChimeFault::Event');

Ok now I retrieve an entry.

my $entry = ChimeFault::Event->retrieve(1);

and then grab all its entries:
my @entries = $entry->entries;
my @secondset = $entry->entries;

The problem is that the Class::DBI executes the SQL to look up the
entries twice. 

I tried caching the returned data in the Event class, but the problem is
that we are using mod_perl. When I do this the garbage script gets all
caught up with the fact that there is event->entry->event->entry
reference and hence never reaching 0 reference count, which means the
data stays in memory and all sorts of bad things happen.

Any suggestions ?


More information about the ClassDBI mailing list