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]