[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