Fix non-sqlite tests
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Relationship.pm
CommitLineData
b8e1e21f 1package DBIx::Class::Relationship;
2
3use strict;
4use warnings;
5
1edd1722 6use base qw/DBIx::Class/;
55e2d745 7
07037f89 8__PACKAGE__->load_own_components(qw/
9 HasMany
10 HasOne
11 BelongsTo
12 Accessor
13 CascadeActions
14 ProxyMethods
15 Base
16/);
b8e1e21f 17
18__PACKAGE__->mk_classdata('_relationships', { } );
19
34d52be2 20=head1 NAME
21
22DBIx::Class::Relationship - Inter-table relationships
23
24=head1 SYNOPSIS
25
26=head1 DESCRIPTION
27
28This class handles relationships between the tables in your database
bfab575a 29model. It allows you to set up relationships and perform joins on them.
34d52be2 30
bfab575a 31Only the helper methods for setting up standard relationship types
32are documented here. For the basic, lower-level methods, see
33L<DBIx::Class::Relationship::Base>.
503536d5 34
34d52be2 35=head1 METHODS
36
bfab575a 37All helper methods take the following arguments:
503536d5 38
8091aa91 39 __PACKAGE__>$method_name('relname', 'Foreign::Class', $cond, $attrs);
bfab575a 40
41Both C<$cond> and C<$attrs> are optional. Pass C<undef> for C<$cond> if
42you want to use the default value for it, but still want to set C<$attrs>.
8091aa91 43See L<DBIx::Class::Relationship::Base> for a list of valid attributes.
503536d5 44
bfab575a 45=head2 belongs_to
503536d5 46
8091aa91 47 # in a Bar class (where Foo has many Bars)
48 __PACKAGE__->belongs_to(foo => Foo);
49 my $f_obj = $obj->foo;
50 $obj->foo($new_f_obj);
503536d5 51
8091aa91 52Creates a relationship where the calling class stores the foreign class's
53primary key in one (or more) of its columns. If $cond is a column name
54instead of a join condition hash, that is used as the name of the column
55holding the foreign key. If $cond is not given, the relname is used as
56the column name.
bfab575a 57
8091aa91 58NOTE: If you are used to L<Class::DBI> relationships, this is the equivalent
59of C<has_a>.
503536d5 60
bfab575a 61=head2 has_many
503536d5 62
8091aa91 63 # in a Foo class (where Foo has many Bars)
64 __PACKAGE__->has_many(bar => Bar, 'foo');
65 my $f_resultset = $obj->foo;
66 my $f_resultset = $obj->foo({ name => { LIKE => '%macaroni%' }, { prefetch => [qw/bar/] });
67 my @f_obj = $obj->foo;
503536d5 68
8091aa91 69 $obj->add_to_foo(\%col_data);
503536d5 70
8091aa91 71Creates a one-to-many relationship, where the corresponding elements of the
72foreign class store the calling class's primary key in one (or more) of its
73columns. You should pass the name of the column in the foreign class as the
74$cond argument, or specify a complete join condition.
75
76If you delete an object in a class with a C<has_many> relationship, all
77related objects will be deleted as well. However, any database-level
78cascade or restrict will take precedence.
503536d5 79
bfab575a 80=head2 might_have
503536d5 81
8091aa91 82 __PACKAGE__->might_have(baz => Baz);
83 my $f_obj = $obj->baz; # to get the baz object
84
85Creates an optional one-to-one relationship with a class, where the foreign class
86stores our primary key in one of its columns. Defaults to the primary key of the
87foreign class unless $cond specifies a column or join condition.
503536d5 88
8091aa91 89If you update or delete an object in a class with a C<might_have> relationship,
90the related object will be updated or deleted as well. Any database-level update
91or delete constraints will override this behavior.
503536d5 92
bfab575a 93=head2 has_one
94
8091aa91 95 __PACKAGE__->has_one(gorch => Gorch);
96 my $f_obj = $obj->gorch;
bfab575a 97
8091aa91 98Creates a one-to-one relationship with another class. This is just like C<might_have>,
99except the implication is that the other object is always present. The only different
100between C<has_one> and C<might_have> is that C<has_one> uses an (ordinary) inner join,
101whereas C<might_have> uses a left join.
503536d5 102
34d52be2 103=cut
104
b8e1e21f 1051;
34d52be2 106
34d52be2 107=head1 AUTHORS
108
daec44b8 109Matt S. Trout <mst@shadowcatsystems.co.uk>
34d52be2 110
111=head1 LICENSE
112
113You may distribute this code under the same terms as Perl itself.
114
115=cut
116