More FAQ!
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Relationship.pm
index dd36166..3a23108 100644 (file)
@@ -118,6 +118,19 @@ instead of a join condition hash, that is used as the name of the column
 holding the foreign key. If $cond is not given, the relname is used as
 the column name.
 
+If the relationship is optional - ie the column containing the foreign
+key can be NULL - then the belongs_to relationship does the right
+thing - so in the example above C<$obj->author> would return C<undef>.
+However in this case you would probably want to set the C<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:-
+
+  # in a Book class (where Author has many Books)
+  __PACKAGE__->belongs_to(author => 'My::DBIC::Schema::Author',
+                          'author', {join_type => 'left'});
+
+
 Cascading deletes are off per default on a C<belongs_to> relationship, to turn
 them on, pass C<< cascade_delete => 1 >> in the $attr hashref.
 
@@ -212,41 +225,6 @@ To use many_to_many, existing relationships from the original table to the link
 table, and from the link table to the end table must already exist, these
 relation names are then used in the many_to_many call.
 
-=head3 Created accessors
-
-=head4 $rel
-
-  my $role_rs = $actor->roles;
-
-  my $role1 = $actor->roles({ name => 'role1' })->first;
-
-Returns a resultset for the table on the far-right side of the many-to-many
-relationship. (e.g., in the above example, a CD's producers).
-
-=head4 add_to_$rel
-
-  my $role = $schema->resultset('Role')->find(1);
-  $actor->add_to_roles($role);
-      # creates a My::DBIC::Schema::ActorRoles linking table row object
-
-  $actor->add_to_roles({ name => 'role1' });
-      # creates a new My::DBIC::Schema::Role row object, as well as the
-      # linking table object
-
-Adds a linking table object for the specified object, or if a hash is given
-instead the related object is created before the linking table object is
-created.
-
-=head4 remove_from_$rel
-
-  my $role = $schema->resultset('Role')->find(1);
-  $actor->remove_from_roles($role);
-      # removes $role's My::DBIC::Schema::ActorRoles linking table row object
-
-Removes the link between the current object and the related object. Note that
-the related object itself won't be deleted unless you call ->delete() on
-it. This method just removes the link between the two objects.
-
 =cut
 
 1;