NAME
DBIx::Class::Relationship::Base - Inter-table relationships
SYNOPSIS
DESCRIPTION
This class handles relationships between the tables in your database model. It allows your to set up relationships, and to perform joins on searches.
METHODS
add_relationship
__PACKAGE__->add_relationship('relname', 'Foreign::Class', $cond, $attrs);
The condition needs to be an SQL::Abstract-style representation of the join between the tables. For example, if you're creating a rel from Foo to Bar,
{ 'foreign.foo_id' => 'self.id' }
will result in the JOIN clause
foo me JOIN bar bar ON bar.foo_id = me.id
You can specify as many foreign => self mappings as necessary.
Valid attributes are as follows:
- join_type
-
Explicitly specifies the type of join to use in the relationship. Any SQL join type is valid, e.g.
LEFT
orRIGHT
. It will be placed in the SQL command immediately beforeJOIN
. - proxy
-
An arrayref containing a list of accessors in the foreign class to proxy in the main class. If, for example, you do the following:
__PACKAGE__->might_have(bar => 'Bar', undef, { proxy => [ qw/margle/ ] });
Then, assuming Bar has an accessor named margle, you can do:
my $obj = Foo->find(1); $obj->margle(10); # set margle; Bar object is created if it doesn't exist
- accessor
-
Specifies the type of accessor that should be created for the relationship. Valid values are
single
(for when there is only a single related object),multi
(when there can be many), andfilter
(for when there is a single related object, but you also want the relationship accessor to double as a column accessor). Formulti
accessors, an add_to_* method is also created, which callscreate_related
for the relationship.
register_relationship($relname, $rel_info)
Registers a relationship on the class
search_related
My::Table->search_related('relname', $cond, $attrs);
count_related
$obj->count_related('relname', $cond, $attrs);
create_related
My::Table->create_related('relname', \%col_data);
new_related
My::Table->new_related('relname', \%col_data);
find_related
My::Table->find_related('relname', @pri_vals | \%pri_vals);
find_or_create_related
My::Table->find_or_create_related('relname', \%col_data);
set_from_related
My::Table->set_from_related('relname', $rel_obj);
update_from_related
My::Table->update_from_related('relname', $rel_obj);
delete_related
My::Table->delete_related('relname', $cond, $attrs);
AUTHORS
Matt S. Trout <mst@shadowcatsystems.co.uk>
LICENSE
You may distribute this code under the same terms as Perl itself.