[Catalyst] Adding relationships to loaded CDBI models

samwyse samwyse at gmail.com
Thu Jun 16 22:33:11 CEST 2005

On 6/16/05, Danijel Milicevic <Danijel.Milicevic at rawmode.org> wrote:
> Am Donnerstag, den 16.06.2005, 13:52 -0400 schrieb Rob Kinyon:
> > This brings up an interesting point - what if you're not using SQLite,
> > but instead are using MySQL/Oracle/Sybase/etc. Some of those dbi:
> > strings can get quite long. What's a best practice for handling that?
> I'm not too sure if I can call it best practice already, but most of us
> (the guys in #catalyst) do supply those "quite long" strings nonetheless
> to the helper method and export the configuration laters to a YAML file.
> Quite useful if you use a simple and lightweight DB like SQLite during
> development and move laters to MySQL/Oracle/PostgreSQL in production.

Also, not all databases support the discovery of relationships, so I'm
using this in my version of the example package Hops::M::CDBI:
    use Class::DBI::Loader::Relationship;

and a bit later in the 'new' method:
    # Unless relationships are already defined in the DB schema...
    unless (__PACKAGE__->config->{relationships}) {
        # Define relationships between the tables.
        $self->loader->relationship($_) for (
            "a brewery produces beers",
            "a style defines beers",
            "a pub has beers on handpumps",

Class::DBI::Loader::Relationship looks at simple pseudo-English
sentences and attempts to deduce 'has_a' and 'has_many' relationships
by looking for the plural and singular forms of the table names.  If
you use it with tables that define foreign key relationships,
$self->loader->relationship will complain, but in that case the helper
script will have set 'relationships' in the config hash to 1; thus the
'unless' statement.

More information about the Catalyst mailing list