Protect several resolve_relationship_condition() callsites
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Relationship.pm
index c6f744d..195514c 100644 (file)
@@ -13,6 +13,10 @@ __PACKAGE__->load_own_components(qw/
   Base
 /);
 
+1;
+
+__END__
+
 =head1 NAME
 
 DBIx::Class::Relationship - Inter-table relationships
@@ -72,8 +76,8 @@ we can do this instead:
  my $fredsbooks = $schema->resultset('Author')->find({ Name => 'Fred' })->books;
 
 Each relationship sets up an accessor method on the
-L<DBIx::Class::Manual::Glossary/"Row"> objects that represent the items
-of your table. From L<DBIx::Class::Manual::Glossary/"ResultSet"> objects,
+L<Result|DBIx::Class::Manual::Glossary/"Result"> objects that represent the items
+of your table. From L<ResultSet|DBIx::Class::Manual::Glossary/"ResultSet"> objects,
 the relationships can be searched using the "search_related" method.
 In list context, each returns a list of Result objects for the related class,
 in scalar context, a new ResultSet representing the joined tables is
@@ -105,7 +109,7 @@ L<DBIx::Class::Relationship::Base>.
 
 All helper methods are called similar to the following template:
 
-  __PACKAGE__->$method_name('relname', 'Foreign::Class', \%cond|\@cond|\&cond?, \%attrs?);
+  __PACKAGE__->$method_name('rel_name', 'Foreign::Class', \%cond|\@cond|\&cond?, \%attrs?);
 
 Both C<cond> and C<attrs> are optional. Pass C<undef> for C<cond> if
 you want to use the default value for it, but still want to set C<attrs>.
@@ -191,15 +195,16 @@ more info see L<DBIx::Class::Relationship::Base/condition>.
   # To retrieve the plain id if you used the ugly version:
   $book->get_column('author_id');
 
-
-If the relationship is optional -- i.e. the column containing the
-foreign key can be NULL -- then the belongs_to relationship does the
-right thing. Thus, in the example above C<< $obj->author >> would
-return C<undef>.  However in this case you would probably want to set
-the L<join_type|DBIx::Class::Relationship/join_type> attribute so that
-a C<LEFT JOIN> is done, which makes complex resultsets involving
-C<join> or C<prefetch> operations work correctly.  The modified
-declaration is shown below:
+If some of the foreign key columns are
+L<nullable|DBIx::Class::ResultSource/is_nullable> you probably want to set
+the L<join_type|DBIx::Class::Relationship::Base/join_type> attribute to
+C<left> explicitly so that SQL expressing this relation is composed with
+a C<LEFT JOIN> (as opposed to C<INNER JOIN> which is default for
+L</belongs_to> relationships). This ensures that relationship traversal
+works consistently in all situations. (i.e. resultsets involving
+L<join|DBIx::Class::ResultSet/join> or
+L<prefetch|DBIx::Class::ResultSet/prefetch>).
+The modified declaration is shown below:
 
   # in a Book class (where Author has_many Books)
   __PACKAGE__->belongs_to(
@@ -209,7 +214,6 @@ declaration is shown below:
     { join_type => 'left' }
   );
 
-
 Cascading deletes are off by default on a C<belongs_to>
 relationship. To turn them on, pass C<< cascade_delete => 1 >>
 in the $attr hashref.
@@ -327,7 +331,7 @@ The second is almost exactly the same as the accessor method but "_rs"
 is added to the end of the method name, eg C<$accessor_name_rs()>.
 This method works just like the normal accessor, except that it always
 returns a resultset, even in list context. The third method, named C<<
-add_to_$relname >>, will also be added to your Row items; this allows
+add_to_$rel_name >>, will also be added to your Row items; this allows
 you to insert new related items, using the same mechanism as in
 L<DBIx::Class::Relationship::Base/"create_related">.
 
@@ -629,17 +633,13 @@ L<DBIx::Class::ResultSet> for a L<list of standard resultset
 attributes|DBIx::Class::ResultSet/ATTRIBUTES> which can be assigned to
 relationships as well.
 
-=cut
-
-1;
-
-=head1 AUTHOR AND CONTRIBUTORS
-
-See L<AUTHOR|DBIx::Class/AUTHOR> and L<CONTRIBUTORS|DBIx::Class/CONTRIBUTORS> in DBIx::Class
-
-=head1 LICENSE
+=head1 FURTHER QUESTIONS?
 
-You may distribute this code under the same terms as Perl itself.
+Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
 
-=cut
+=head1 COPYRIGHT AND LICENSE
 
+This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
+by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
+redistribute it and/or modify it under the same terms as the
+L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.