[Dbix-class] Can't get many_to_many links to work
Ekki Plicht (DF4OR)
ekki at plicht.de
Wed Jan 29 20:38:19 GMT 2014
Hi,
I have a hard time to get a many_to_many 'relation' to work.
Three tables: Pages, Images and PageImg (the link or bridge table). A
page contains many images, an image can appear on many pages.
########################################################
# The page table
package Bildzuo::Result::Page;
[...]
__PACKAGE__->has_many(
"page_imgs",
"Bildzuo::Result::PageImg",
{ "foreign.page_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->many_to_many('images' => 'page_imgs', 'img');
########################################################
# The image table
package Bildzuo::Result::Img;
[...]
__PACKAGE__->has_many(
"page_imgs",
"Bildzuo::Result::PageImg",
{ "foreign.img_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->many_to_many('pages' => 'page_imgs', 'page');
########################################################
# The bridge table
package Bildzuo::Result::PageImg;
[...]
__PACKAGE__->belongs_to(
"img",
"Bildzuo::Result::Img",
{ id => "img_id" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
);
__PACKAGE__->belongs_to(
"page",
"Bildzuo::Result::Page",
{ id => "page_id" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
);
########################################################
Regardless from which side I try to get a resultset, I always get the error
Can't locate object method "images" via package "DBIx::Class::ResultSet"
or
Can't locate object method "pages" via package "DBIx::Class::ResultSet"
Any idea what's wrong here? The result modules were generated by
'dbicdump', with the many to many bridges added manually.
TIA,
Ekki
More information about the DBIx-Class
mailing list