[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