[Cologne-pm] DBIx::Class joins?!?
Michael Lamertz
mike at lamertz.net
Wed Jul 4 17:26:37 PDT 2007
On Wed, Jul 04, 2007 at 08:36:13PM +0200, ReneeB wrote:
> ungetestet:
und non-funktional:
"DBIx::Class::ResultSet::search(): No such relationship genre at ./dbix line 11"
Ich scheitere alleine schon beim Join, ohne die zusaetzliche
year-Clause.
TESTBED fuer sqlite3:
---------- create.sql ----------
create table cd (
id integer primary key,
name varchar(64)
);
create table genre (
id integer primary key,
name varchar(64)
);
create table cd_genre (
cd integer,
genre integer
);
insert into cd values ( 1, 'Pop Album 1');
insert into cd values ( 2, 'Pop Album 4');
insert into cd values ( 3, 'Rock Album 1');
insert into cd values ( 4, 'Techno Album 2');
insert into cd values ( 5, 'Rock Album 2');
insert into cd values ( 6, 'Rock Album 3');
insert into cd values ( 7, 'Techno Album 1');
insert into cd values ( 8, 'Rock-Pop Album 2');
insert into cd values ( 9, 'Rock-Pop Album 1');
insert into cd values (10, 'Pop-Techno Album 1');
insert into cd values (11, 'Pop-Techno Album 2');
insert into cd values (12, 'Pop Album 2');
insert into cd values (13, 'Pop Album 3');
insert into genre values (1, 'Pop');
insert into genre values (2, 'Rock');
insert into genre values (3, 'Techno');
insert into cd_genre values (1, 1);
insert into cd_genre values (2, 1);
insert into cd_genre values (3, 2);
insert into cd_genre values (4, 3);
insert into cd_genre values (5, 2);
insert into cd_genre values (6, 2);
insert into cd_genre values (7, 3);
insert into cd_genre values (8, 1);
insert into cd_genre values (8, 2);
insert into cd_genre values (9, 1);
insert into cd_genre values (9, 2);
insert into cd_genre values (10, 1);
insert into cd_genre values (10, 3);
insert into cd_genre values (11, 1);
insert into cd_genre values (11, 3);
insert into cd_genre values (12, 1);
insert into cd_genre values (13, 1);
---------- create.sql ----------
---------- Schema.pm ----------
package Schema;
use base qw{ DBIx::Class::Schema };
__PACKAGE__->load_classes( qw{ Cd CdGenre Genre } );
1;
---------- Schema.pm ----------
---------- Schema/Cd.pm ----------
package Schema::Cd;
use strict;
use warnings;
use base qw{ DBIx::Class };
__PACKAGE__->load_components( qw{ PK::Auto Core } );
__PACKAGE__->table('cd');
__PACKAGE__->add_columns( qw{ id name } );
__PACKAGE__->set_primary_key( 'id' );
__PACKAGE__->has_many( cd_genre => 'Schema::CdGenre', 'genre' );
__PACKAGE__->many_to_many( 'cds' => 'cd_genre', 'cd' );
1;
---------- Schema/Cd.pm ----------
---------- Schema/CdGenre.pm ----------
package Schema::CdGenre;
use strict;
use warnings;
use base qw{ DBIx::Class };
__PACKAGE__->load_components( qw{ PK::Auto Core } );
__PACKAGE__->table('cd_genre');
__PACKAGE__->add_columns( qw{ cd genre } );
__PACKAGE__->set_primary_key( qw{ cd genre } );
__PACKAGE__->belongs_to( cd => 'Schema::Cd' );
__PACKAGE__->belongs_to( genre => 'Schema::Genre' );
1;
---------- Schema/CdGenre.pm ----------
---------- Schema/Genre.pm ----------
package Schema::Genre;
use strict;
use warnings;
use base qw{ DBIx::Class };
__PACKAGE__->load_components( qw{ PK::Auto Core } );
__PACKAGE__->table('genre');
__PACKAGE__->add_columns( qw{ id name } );
__PACKAGE__->set_primary_key( 'id' );
__PACKAGE__->has_many( cd_genre => 'Schema::CdGenre', 'cd' );
__PACKAGE__->many_to_many( 'genres' => 'cd_genre', 'genre' );
1;
---------- Schema/Genre.pm ----------
---------- dbix ----------
#!/usr/bin/perl
use strict;
use warnings;
use Schema;
$\ = "\n";
my $schema = Schema->connect( 'dbi:SQLite:cd.db' );
my @techno = $schema->resultset( 'Cd' )->search(
{ 'genre.name' => 'Techno' },
{ join => [ qw{ cd_genre genre } ] }
);
print $_->name foreach (@techno);
---------- dbix ----------
Er hat 'genre' ja als unbekannte Relation angemeckert. Stimmt ja im
Grunde auch, denn im many_to_many heisst der Bezeichner 'genres'. Das
macht aber keinerlei Unterschied, und die Doku sagt ja ohnehin, dass
'many_to_many' keine echte Relation ist.
*Grummel*
--
Michael Lamertz - Sandstr. 122 - 50226 Frechen
M: +49 171 6900310 / T: +49 2234 204947 / F: +49 2234 4358725
www.perl-ronin.de - www.fuss-und-hand.de - www.lamertz.net
mlamertz at perl-ronin.de - michael at fuss-und-hand.de - mike at lamertz.net
More information about the Cologne-pm
mailing list