Hi,

yes it is possible to have multiple parents and childs. I'm not using the many_to_many helper and even a $rs->parents->first->parent results in a db hit. Seems like DBIC doesn't recognize that everything it needs is already
there.

I have no idea where to look at in the dbic code to find this bug (if it is one)


cheers,

moritz

Am 16.07.2008 um 20:45 schrieb Hartmaier Alexander:

Hi Moritz!

You have to use the rels the same way to prefetch them, without using the many_to_many helper (which I can't see in your code).
Imho the ->all is the problem.
But why have the MapCategories table at all?
Just store the parent or child in your Categories table!
Or is it really possible to have multiple parents and childs?

-Alex


-----Original Message-----
From: Moritz Onken [mailto:[EMAIL PROTECTED]
Sent: Tuesday, July 08, 2008 9:48 AM
To: DBIx::Class user and developer list
Subject: [Dbix-class] DBIC hits DB thoguh using prefetch (repost)

Hi,

sorry for the repost, but there was no answer to my previous post.

I have a table 'categories' which has a many_to_many relationship to
itself using a table 'map_categories'.

I found out that prefetching a many_to_many rel does not work. So I
prefetched the has_many rel to 'map_categories' (parents) and prefetch
the belongs_to rel (parent) from 'map_categories' to 'categories' ($rs-
search({},{prefetch => {'parents' => 'parent'}})->all). This does
the sql statement I expect but when I call $row->parents->all (or $rs-
first->parents->first->parent) on a row of this rs it hits the
database again. Although the resultset already contains all rows it
needs.

Any ideas what I did wrong?

cheers,

moritz

package Schema::Categories;

use strict;
use warnings;

use base 'DBIx::Class';

__PACKAGE__->load_components("PK::Auto", "Core");
__PACKAGE__->table("categories");
__PACKAGE__->add_columns(
 "title",
 {
   data_type => "character varying",
   default_value => undef,
   is_nullable => 1,
   size => 100,
 },
 "id",
 {
   data_type => "integer",
   is_nullable => 0
 });

__PACKAGE__->set_primary_key("id");

__PACKAGE__->has_many("parents" => 'Schema::MapCategories' => "child");


1;

package Schema::MapCategories;

use strict;
use warnings;

use base 'DBIx::Class';

__PACKAGE__->load_components("PK::Auto", "Core");
__PACKAGE__->table("map_categories");
__PACKAGE__->add_columns(
 "child",
 {
   data_type => "integer",
   is_nullable => 0,
 },
 "parent",
 {
   data_type => "integer",
   is_nullable => 0
 });

__PACKAGE__->belongs_to("child" => "Schema::Categories", "child");
__PACKAGE__->belongs_to("parent" => "Schema::Categories", "parent");
__PACKAGE__->add_unique_constraint([ qw/child parent/ ]);


1;

_______________________________________________
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/[EMAIL PROTECTED]


*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
T-Systems Austria GesmbH   Rennweg 97-99, 1030 Wien
Handelsgericht Wien, FN 79340b
*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
Notice: This e-mail contains information that is confidential and may be privileged. If you are not the intended recipient, please notify the sender and then
delete this e-mail immediately.
*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*


_______________________________________________
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/[EMAIL PROTECTED]


_______________________________________________
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/[EMAIL PROTECTED]

Reply via email to