while (my $cd = $rs->next) { print "CD: " . $cd->title . ", Artist: " . $cd->artist->name; } #### SELECT artist.* FROM artist WHERE artist.id = ? #### my $rs = $schema->resultset('CD')->search( { 'artist.name' => 'Bob Marley' }, { join => [qw/ artist /], order_by => [qw/ artist.name /], prefetch => [qw/ artist /] # return artist data too! } ); # Equivalent SQL (note SELECT from both "cd" and "artist"): # SELECT cd.*, artist.* FROM cd # JOIN artist ON cd.artist = artist.id # WHERE artist.name = 'Bob Marley' # ORDER BY artist.name #### while (my $cd = $rs->next) { print "CD: " . $cd->title . ", Artist: " . $cd->artist->name; } #### $c->stash->{nodes} = [$c->model('QDB::Nodes')->search( {}, { join => { 'sdh_mux_settings' => 'mux_types' }, #'+select' => [ qw/ sdh_mux_settings.ip_address mux_types.mux_type/ ], #'+as' => [ qw/ ip_address mux_type / ], #columns => [qw/foo bar relationship_name.baz #select => [ 'me.net_id', 'me.net_name', \'COUNT(nodes.node_id) as node_count' ], #{ count => 'nodes.node_id' } #as => [qw/ net_id net_name node_count /], #group_by => [qw/ me.net_id me.net_name /], #prefetch => [qw/ sdh_mux_settings /] prefetch => { 'sdh_mux_settings' => 'mux_types' } } )]; #### package Qinfo::QDBSchema::MuxTypes; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/PK::Auto Core/); __PACKAGE__->table('mux_types'); __PACKAGE__->add_columns(qw/mux_type_id mux_type description/); __PACKAGE__->set_primary_key('mux_type_id'); __PACKAGE__->has_many('sdh_mux_settings' => 'Qinfo::QDBSchema::SdhMuxSettings','mux_type_id'); 1; #### package Qinfo::QDBSchema::Nodes; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/PK::Auto Core/); __PACKAGE__->table('nodes'); __PACKAGE__->add_columns(qw/net_id node_id node_name node_type_id/); __PACKAGE__->set_primary_key('node_id'); __PACKAGE__->has_many('sdh_mux_settings' => 'Qinfo::QDBSchema::SdhMuxSettings','node_id'); __PACKAGE__->belongs_to('networks' => 'Qinfo::QDBSchema::Networks','net_id'); 1; #### package Qinfo::QDBSchema::SdhMuxSettings; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/PK::Auto Core/); __PACKAGE__->table('sdh_mux_settings'); __PACKAGE__->add_columns(qw/ node_id mux_type_id ip_address nsap /); __PACKAGE__->belongs_to('nodes' => 'Qinfo::QDBSchema::Nodes','node_id'); __PACKAGE__->belongs_to('mux_types' => 'Qinfo::QDBSchema::MuxTypes','mux_type_id'); 1; #### SELECT me.net_id, me.node_id, me.node_name, me.node_type_id, sdh_mux_settings.no de_id, sdh_mux_settings.mux_type_id, sdh_mux_settings.ip_address, sdh_mux_settin gs.nsap, mux_types.mux_type_id, mux_types.mux_type, mux_types.description FROM n odes me LEFT JOIN sdh_mux_settings sdh_mux_settings ON ( sdh_mux_settings.node_i d = me.node_id ) LEFT JOIN mux_types mux_types ON ( mux_types.mux_type_id = sdh_ mux_settings.mux_type_id ) ORDER BY sdh_mux_settings.node_id: SELECT me.node_id, me.mux_type_id, me.ip_address, me.nsap FROM sdh_mux_settings me WHERE ( me.node_id = ? ): '2' SELECT me.node_id, me.mux_type_id, me.ip_address, me.nsap FROM sdh_mux_settings me WHERE ( me.node_id = ? ): '3' SELECT me.node_id, me.mux_type_id, me.ip_address, me.nsap FROM sdh_mux_settings me WHERE ( me.node_id = ? ): '4' SELECT me.node_id, me.mux_type_id, me.ip_address, me.nsap FROM sdh_mux_settings me WHERE ( me.node_id = ? ): '5' SELECT me.node_id, me.mux_type_id, me.ip_address, me.nsap FROM sdh_mux_settings me WHERE ( me.node_id = ? ): '6' SELECT me.node_id, me.mux_type_id, me.ip_address, me.nsap FROM sdh_mux_settings me WHERE ( me.node_id = ? ): '7' SELECT me.node_id, me.mux_type_id, me.ip_address, me.nsap FROM sdh_mux_settings me WHERE ( me.node_id = ? ): '8'