NAME

DBIx::Class::Helper::Row::JoinTable - Easily set up join tables with DBIx::Class

VERSION

version 2.00101

SYNOPSIS

package MyApp::Schema::Result::Foo_Bar;

__PACKAGE__->load_components(qw{Helper::JoinTable Core});

__PACKAGE__->join_table({
   left_class   => 'Foo',
   left_method  => 'foo',
   right_class  => 'Bar',
   right_method => 'bar',
});

# the above is the same as:

__PACKAGE__->table('Foo_Bar');
__PACKAGE__->add_columns(
   foo_id => {
      data_type         => 'integer',
      is_nullable       => 0,
      is_numeric        => 1,
   },
   bar_id => {
      data_type         => 'integer',
      is_nullable       => 0,
      is_numeric        => 1,
   },
);

$self->set_primary_key(qw{foo_id bar_id});

__PACKAGE__->belongs_to( foo => 'MyApp::Schema::Result::Foo' 'foo_id');
__PACKAGE__->belongs_to( bar => 'MyApp::Schema::Result::Bar' 'bar_id');

METHODS

All the methods take a configuration hashref that looks like the following:

{
   left_class          => 'Foo',
   left_method         => 'foo',     # see NOTE
   left_method_plural  => 'foos',    # see NOTE, not required, used for
                                     # many_to_many rel name in right_class
                                     # which is not generated by default
   right_class         => 'Bar',
   right_method        => 'bar',     # see NOTE
   right_method_plural => 'bars',    # see NOTE, not required, used for
                                     # many_to_many rel name in left_class
                                     # which is not generated by default
   namespace           => 'MyApp',   # default is guessed via *::Foo
   self_method         => 'foobars', # not required, used for setting the name of the
                                     # join table's relationship in a has_many
                                     # which is not generated by default
}

join_table

This is the method that you probably want. It will set your table, add columns, set the primary key, and set up the relationships.

add_join_columns

Adds two non-nullable integer fields named "${left_method}_id" and "${right_method}_id" respectively.

generate_has_manys

Installs methods into left_class and right_class to get to the join table. The methods will be named what's passed into the configuration hashref as self_method.

generate_many_to_manys

Installs many_to_many methods into left_class and right_class. The methods will be named what's passed into the configuration hashref as left_method_plural for the right_class and right_method_plural for the left_class.

generate_primary_key

Sets "${left_method}_id" and "${right_method}_id" to be the primary key.

generate_relationships

This adds relationships to "${namespace}::Schema::Result::$left_class" and "${namespace}::Schema::Result::$left_class" respectively.

set_table

This method sets the table to "${left_class}_${right_class}".

NOTE

This module uses String::CamelCase to default the method names and uses Lingua::EN::Inflect for pluralization.

CHANGES BETWEEN RELEASES

Changes since 0.*

Originally this module would use

data_type         => 'integer',
is_nullable       => 0,
is_numeric        => 1,

for all joining columns. It now infers data_type, is_nullable, is_numeric, and extra from the foreign tables.

AUTHOR

Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2010 by Arthur Axel "fREW" Schmidt.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.