AW: [Dbix-class] Complex table joins

Richard Jones ra.jones at dpw.clara.co.uk
Mon May 21 19:00:34 GMT 2007


FastJack wrote:

>> No, it doesn't. I know the arrayref generates valid sql as I can
>> extract it from the DBIC::Profiler output and run it manually. It 
>> finds the data I want. I have also manually constructed 'from' as a
>> complex data structure (see below),  but always the same error: 
>> "DBIx::Class::ResultSet::single(): No such relationship 
>> 'speciality' at ...."
> 
> "No such relationship" means, you haven't defined the relationship in
> the Schema::Foo-Package with belongs_to or has_many. As far as I know
>  you can't simply use the table-name in the join-definition.

Yes, I'm sure you're right. I came to the same conclusion before I left
off. I tried to define the relationship in Schema::Foo, but cannot find 
the right syntax.

The problem is Schema::Foo is based on table foo. Table foo has a 
foreign key to table bar, which itself has a foreign key to table baz. I 
want to retrieve a column (speciality) in baz.

The relationships between bar and baz is defined in Schema::Bar and 
Schema::Baz, not Schema::Foo.

So I tried this in Schema::Foo:

__PACKAGE__->add_relationship('speciality', 'Schema::Baz',
   {
     'me.bar_id' => 'bar.id',
     'bar.baz_id' => 'baz.id',
   }, );

Generates the following error:

Caught exception in MyApp::Controller::Search->db_lookup 
"DBIx::Class::ResultSet::pager(): Invalid rel cond key bar.baz_id at 
....". Does it mean invalid relationship condition key?

But it feels like I might be on the right lines now?
-- 
Richard Jones




More information about the Dbix-class mailing list