[Dbix-class] How to elegantly memoize method calls to related tables

Robert Rothenberg robrwo at gmail.com
Wed May 2 17:34:01 GMT 2012


Suppose we have two tables: events and people, where each event has a person
associated with it, e.g. in MySchema::Result::Event,

  __PACKAGE__->belongs_to(
    "person",
    "MySchema::Result::Person",
    { id => "person_id" },
    { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
  );


The naive way of handling events is to do something like

  foreach my $event (@events) {

    my $person = $event->person;

    ...

  }

but that is inefficient when there are many events associated with a small
number of people.

What is the best way to modify customize the person method to memoize
people, so that I can code the naive way (which is easier to read) but have
DBIC do the right thing?




More information about the DBIx-Class mailing list