Hill, Woodrow J wrote:
> Greetings,
>  
>     I'm in the process of converting over to DBIx::Class from
> Class::DBI, and having issues with a setup that I have functional in the
> latter.  I have two tables in the database, one a "cross-reference" to
> the other table, which references itself to define a hierarchical
> structure.  I'm having some issues adjusting the "many-to-many"
> documentation to query such a setup correctly.  The fundamental error is
> that, when I call on an item that's supposed to be higher or lower in
> the hierarchy, I get back my originating item.
> 
> My setup, trimmed down for public posting purposes, is very similar to
> this:
> 
> [CrossReference table]
> CrossRefID
> HigherInformation (foreign key for SelfReference item higher in
> hierarchy)
> LowerInformation (foreign key for SelfReference item lower in hierarchy)
> 
> [SelfReference table]
> InformationID
> InformationTitle
> 
> [CrossReference.pm : Module for cross-reference table]
> [...]
> __PACKAGE__->belongs_to(HigherInformation     =>
> 'Project::SelfReference');
> __PACKAGE__->belongs_to(LowerInformation      =>
> 'Project::SelfReference', 'LowerInformation');
> 
> [SelfReference.pm : Module for self-referenced table]
> [...]
> __PACKAGE__->has_many(higher_xref     => 'Project::CrossReference',
> 'HigherInformation');
> __PACKAGE__->has_many(lower_xref      => 'Project::CrossReference',
> 'LowerInformation');

I think these two lines are wrong, and you need to swap the third args.

If you think about it, if you're referring to *lower* info than yourself, then 
logically you want to be *higher* thing in the link table, and vice versa.

> __PACKAGE__->many_to_many(higher_info => 'higher_xref',
> 'HigherInformation');
> __PACKAGE__->many_to_many(lower_info  => 'lower_xref',
> 'LowerInformation');
> 
> [From my test code]
> [...set up Schema connection...]
> my $test_information_item =
> $schema->resultset('Information')->find(750);
> is($test_information_item->lower_info->next->InformationID, '3542'); #
> comes out as 750
> 
> 
> As I mentioned, the Class::DBI equivalent I created works OK, if slowly
> -- indeed, early benchmarking of simpler queries was a major reason I've
> attempted this changeover.  In the hope that I'm just missing a bit of
> basic setup logic from DBIx::Class, as opposed to a syntactical error,
> I've posted the above; if people want/need to see complete code, please
> let me know.

Nah, you just got the definitions swapped. I'm good at that as well, about 3/4 
of my many-many problems tend to turn out to be I got one of the args the 
wrong way round.

Declaration syntax that will be proof against us being silly buggers is in the 
works :)

-- 
      Matt S Trout       Offering custom development, consultancy and support
   Technical Director    contracts for Catalyst, DBIx::Class and BAST. Contact
Shadowcat Systems Ltd.  mst (at) shadowcatsystems.co.uk for more information

+ Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +

_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/

Reply via email to