X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRelationship.pm;h=e3b812b78020f45febdbf80f4e4f2c0d00a81b52;hb=26283ee38f220f6c6bae720ea5a189c9c0f47f6f;hp=8de8cc04bfa5f708fd513b52df6732bf5fd4409f;hpb=2a2ab6ab326e820a2131457e3a0baaddaea46698;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Relationship.pm b/lib/DBIx/Class/Relationship.pm index 8de8cc0..e3b812b 100644 --- a/lib/DBIx/Class/Relationship.pm +++ b/lib/DBIx/Class/Relationship.pm @@ -31,14 +31,17 @@ DBIx::Class::Relationship - Inter-table relationships MyDB::Schema::Actor->many_to_many('roles' => 'actorroles', 'role'); ## Using relationships - $schema->resultset('Actor')->roles(); - $schema->resultset('Role')->search_related('actors', { Name => 'Fred' }); - $schema->resultset('ActorRole')->add_to_roles({ Name => 'Sherlock Holmes'}); + $schema->resultset('Actor')->find({ id => 1})->roles(); + $schema->resultset('Role')->find({ id => 1 })->actorroles->search_related('actor', { Name => 'Fred' }); + $schema->resultset('Actor')->add_to_roles({ Name => 'Sherlock Holmes'}); See L for more. =head1 DESCRIPTION +The word I has a specific meaning in DBIx::Class, see +the definition in the L. + This class provides methods to set up relationships between the tables in your database model. Relationships are the most useful and powerful technique that L provides. To create efficient database queries, @@ -102,29 +105,29 @@ L. All helper methods are called similar to the following template: - __PACKAGE__->$method_name('relname', 'Foreign::Class', $cond, $attrs); - + __PACKAGE__->$method_name('relname', 'Foreign::Class', \%cond | \@cond, \%attrs); + Both C<$cond> and C<$attrs> are optional. Pass C for C<$cond> if -you want to use the default value for it, but still want to set C<$attrs>. +you want to use the default value for it, but still want to set C<\%attrs>. See L for documentation on the -attrubutes that are allowed in the C<$attrs> argument. +attrubutes that are allowed in the C<\%attrs> argument. =head2 belongs_to =over 4 -=item Arguments: $accessor_name, $related_class, $fk_column|\%cond|\@cond?, \%attr? +=item Arguments: $accessor_name, $related_class, $our_fk_column|\%cond|\@cond?, \%attrs? =back Creates a relationship where the calling class stores the foreign -class's primary key in one (or more) of its columns. This relationship -defaults to using C<$accessor_name> as the column in this class -to resolve the join against the primary key from C<$related_class>, -unless C<$fk_column> specifies the foreign key column in this class or -C specifies a reference to a join condition hash. +class's primary key in one (or more) of the calling class columns. +This relationship defaults to using C<$accessor_name> as the column +name in this class to resolve the join against the primary key from +C<$related_class>, unless C<$our_fk_column> specifies the foreign key column +in this class or C specifies a reference to a join condition hash. =over @@ -144,7 +147,7 @@ indicated by this relationship. This is the class name of the table referenced by the foreign key in this class. -=item fk_column +=item our_fk_column The column name on this class that contains the foreign key. @@ -153,7 +156,7 @@ OR =item cond A hashref where the keys are C and -the values are C. This is useful for +the values are C. This is useful for relations that are across multiple columns. =back @@ -208,25 +211,32 @@ Cascading deletes are off by default on a C relationship. To turn them on, pass C<< cascade_delete => 1 >> in the $attr hashref. +By default, DBIC will return undef and avoid querying the database if a +C accessor is called when any part of the foreign key IS NULL. To +disable this behavior, pass C<< undef_on_null_fk => 0 >> in the C<$attr> +hashref. + NOTE: If you are used to L relationships, this is the equivalent of C. See L for documentation on relationship -methods and valid relationship attributes. +methods and valid relationship attributes. Also see L +for a L +which can be assigned to relationships as well. =head2 has_many =over 4 -=item Arguments: $accessor_name, $related_class, $foreign_key_column|\%cond|\@cond?, \%attr? +=item Arguments: $accessor_name, $related_class, $their_fk_column|\%cond|\@cond?, \%attrs? =back Creates a one-to-many relationship, where the corresponding elements of the foreign class store the calling class's primary key in one (or -more) of its columns. This relationship defaults to using the end of -this classes namespace as the foreign key in C<$related_class> to -resolve the join, unless C<$foreign_key_column> specifies the foreign +more) of the foreign class columns. This relationship defaults to using +the end of this classes namespace as the foreign key in C<$related_class> +to resolve the join, unless C<$their_fk_column> specifies the foreign key column in C<$related_class> or C specifies a reference to a join condition hash. @@ -249,7 +259,7 @@ indicated by this relationship. This is the class name of the table which contains a foreign key column containing PK values of this class. -=item foreign_key_column +=item their_fk_column The column name on the related class that contains the foreign key. @@ -257,7 +267,7 @@ OR =item cond -A hashref where the keys are C and +A hashref where the keys are C and the values are C. This is useful for relations that are across multiple columns. @@ -287,7 +297,7 @@ OR condition. 'My::DBIC::Schema::Book', { 'foreign.author_id' => 'self.id' }, ); - + # OR (similar result, assuming related_class is storing our PK, in "author") # (the "author" is guessed at from "Author" in the class namespace) My::DBIC::Schema::Author->has_many( @@ -343,19 +353,21 @@ pass C<< cascade_copy => 0 >> in the C<$attr> hashref. The behaviour defaults to C<< cascade_copy => 1 >>. See L for documentation on relationship -methods and valid relationship attributes. +methods and valid relationship attributes. Also see L +for a L +which can be assigned to relationships as well. =head2 might_have =over 4 -=item Arguments: $accessor_name, $related_class, $foreign_key_column|\%cond|\@cond?, \%attr? +=item Arguments: $accessor_name, $related_class, $their_fk_column|\%cond|\@cond?, \%attrs? =back Creates an optional one-to-one relationship with a class. This relationship defaults to using C<$accessor_name> as the foreign key in C<$related_class> to -resolve the join, unless C<$foreign_key_column> specifies the foreign key +resolve the join, unless C<$their_fk_column> specifies the foreign key column in C<$related_class> or C specifies a reference to a join condition hash. @@ -377,7 +389,7 @@ indicated by this relationship. This is the class name of the table which contains a foreign key column containing PK values of this class. -=item foreign_key_column +=item their_fk_column The column name on the related class that contains the foreign key. @@ -385,7 +397,7 @@ OR =item cond -A hashref where the keys are C and +A hashref where the keys are C and the values are C. This is useful for relations that are across multiple columns. @@ -425,19 +437,21 @@ will have deleted/updated the related records or raised an exception before DBIx::Class gets to perform the cascaded operation. See L for documentation on relationship -methods and valid relationship attributes. +methods and valid relationship attributes. Also see L +for a L +which can be assigned to relationships as well. =head2 has_one =over 4 -=item Arguments: $accessor_name, $related_class, $foreign_key_column|\%cond|\@cond?, \%attr? +=item Arguments: $accessor_name, $related_class, $their_fk_column|\%cond|\@cond?, \%attrs? =back Creates a one-to-one relationship with a class. This relationship defaults to using C<$accessor_name> as the foreign key in C<$related_class> to -resolve the join, unless C<$foreign_key_column> specifies the foreign key +resolve the join, unless C<$their_fk_column> specifies the foreign key column in C<$related_class> or C specifies a reference to a join condition hash. @@ -459,7 +473,7 @@ indicated by this relationship. This is the class name of the table which contains a foreign key column containing PK values of this class. -=item foreign_key_column +=item their_fk_column The column name on the related class that contains the foreign key. @@ -467,7 +481,7 @@ OR =item cond -A hashref where the keys are C and +A hashref where the keys are C and the values are C. This is useful for relations that are across multiple columns. @@ -510,16 +524,22 @@ In the above example, each Book in the database is associated with exactly one ISBN object. See L for documentation on relationship -methods and valid relationship attributes. +methods and valid relationship attributes. Also see L +for a L +which can be assigned to relationships as well. =head2 many_to_many =over 4 -=item Arguments: $accessor_name, $link_rel_name, $foreign_rel_name, \%attr? +=item Arguments: $accessor_name, $link_rel_name, $foreign_rel_name, \%attrs? =back +C is a I which has a specific +meaning in DBIx::Class, see the definition in the +L. + C is not strictly a relationship in its own right. Instead, it is a bridge between two resultsets which provide the same kind of convenience accessors as true relationships provide. Although the accessor will return a @@ -593,7 +613,9 @@ will be created for the Role class for the C many_to_many relationship. See L for documentation on relationship -methods and valid relationship attributes. +methods and valid relationship attributes. Also see L +for a L +which can be assigned to relationships as well. =cut