have add_to_$rel return $link for many to many

2 messages Options
Embed this post
Permalink
Todd W-2

have add_to_$rel return $link for many to many

Reply Threaded More More options
Print post
Permalink
Hello,

I'd like add_to_$rel return the $link instead of $obj in ::ManyToMany.pm.
I've inlined a diff below that does so, with an updated test and
documentation patch against
http://dev.catalyst.perl.org/repos/bast/DBIx-Class/0.08/tags/0.08109

Index: t/relationship/core.t
===================================================================
--- t/relationship/core.t       (revision 7380)
+++ t/relationship/core.t       (working copy)
@@ -9,7 +9,7 @@
 my $schema = DBICTest->init_schema();
 my $sdebug = $schema->storage->debug;

-plan tests => 79;
+plan tests => 80;

 # has_a test
 my $cd = $schema->resultset("CD")->find(4);
@@ -185,7 +185,10 @@
 my $prod_before_count = $schema->resultset('Producer')->count;
 is( $prod_rs->count, 0, "CD doesn't yet have any producers" );
 my $prod = $schema->resultset('Producer')->find(1);
-$cd->add_to_producers($prod);
+isa_ok(
+  $cd->add_to_producers($prod),
+  'DBICTest::Schema::CD_to_Producer' => '$cd->add_to_producers($prod)'
+);
 is( $prod_rs->count(), 1, 'many_to_many add_to_$rel($obj) count ok' );
 is( $prod_rs->first->name, 'Matt S Trout',
     'many_to_many add_to_$rel($obj) ok' );
Index: lib/DBIx/Class/Relationship/ManyToMany.pm
===================================================================
--- lib/DBIx/Class/Relationship/ManyToMany.pm   (revision 7380)
+++ lib/DBIx/Class/Relationship/ManyToMany.pm   (working copy)
@@ -102,7 +102,7 @@
       my $link = $self->search_related($rel)->new_result($link_vals);
       $link->set_from_related($f_rel, $obj);
       $link->insert();
-         return $obj;
+         return $link;
     };

     my $set_meth_name = join '::', $class, $set_meth;
Index: lib/DBIx/Class/Relationship.pm
===================================================================
--- lib/DBIx/Class/Relationship.pm      (revision 7380)
+++ lib/DBIx/Class/Relationship.pm      (working copy)
@@ -595,13 +595,14 @@
 To add a role for your actor, and fill in the year of the role in the
 actor_roles table:

-  $actor->add_to_roles($role, { year => 1995 });
+  my $link = $actor->add_to_roles($role, { year => 1995 });

 In the above example, ActorRoles is the link table class, and Role is the
 foreign class. The C<$link_rel_name> parameter is the name of the accessor
for
 the has_many relationship from this table to the link table, and the
 C<$foreign_rel_name> parameter is the accessor for the belongs_to
relationship
-from the link table to the foreign table.
+from the link table to the foreign table. The My::DBIC::Schema::ActorRoles
+instance is returned.

 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


_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@...
Peter Rabbitson-2

Re: have add_to_$rel return $link for many to many

Reply Threaded More More options
Print post
Permalink
Todd W wrote:
> Hello,
>
> I'd like add_to_$rel return the $link instead of $obj in
> ::ManyToMany.pm.

This can very well break code that relied on the previous behavior.
Please detail your reasons for doing this, and wait for others to
weigh on whether the change is worth it.

 I've inlined a diff below that does so, with an updated
> test and documentation patch against
> http://dev.catalyst.perl.org/repos/bast/DBIx-Class/0.08/tags/0.08109

Patches normally go against 0.08/trunk, but that'll do too.

_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@...