The test scenario contains authors and books, where a book belongs_to an author, and an author has_many books. The problem seems to occur where the foreign key in books has an accessor set, and the relationship has the same name as the actual column name. Somewhere along the line, the column accessor is getting confused with the relationship, I guess.
I've included the test files inline below, as well as attached them to the email.
-A
============================
MyDB.pm
============================
package MyDB;
use strict;
use warnings;
use base qw/DBIx::Class::Schema/;
__PACKAGE__->load_classes(qw/Author Book/);
1;
============================
MyDB/Author.pm
============================
package MyDB::Author;
use warnings;
use strict;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/ Core /);
__PACKAGE__->table('authors');
__PACKAGE__->add_columns(
id => {
data_type => 'INTEGER',
is_nullable => 0,
is_auto_increment => 1,
},
name => {
data_type => 'VARCHAR',
size => 150,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many( 'books' => 'MyDB::Book', 'author' );
1;
============================
MyDB/Book.pm
============================
package MyDB::Book;
use warnings;
use strict;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/ Core /);
__PACKAGE__->table('books');
__PACKAGE__->add_columns(
id => {
data_type => 'INTEGER',
is_nullable => 0,
is_auto_increment => 1,
},
title => {
data_type => 'VARCHAR',
size => 150,
is_nullable => 0,
},
author => {
accessor => 'author_id',
data_type => 'INTEGER',
is_nullable => 0,
is_foreign_key => 1,
},
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->belongs_to( 'author' => 'MyDB::Author', 'author' );
1;
============================
test.t
============================
use strict;
use warnings;
use Test::More tests => 3;
use MyDB;
my $schema = MyDB->connect( 'dbi:mysql:test', '', '' );
$schema->deploy( { add_drop_table => 1 } );
$schema->populate( 'Author', [ [qw/id name/], [ 1, 'Stephen
King' ], ] );
$schema->populate( 'Book', [ [qw/id title author/], [ 1, 'Misery',
1 ], ] );
my $book = $schema->resultset('Book')->find(1);
is( $book->title(), 'Misery' );
is( $book->author_id(), 1 );
is( $book->author->name(), 'Stephen King' );
============================
test output (under RC3)
============================
test....ok 1/3
# Failed test at test.t line 15.
# got: 'MyDB::Author=HASH(0x1a9bbbc)'
# expected: '1'
Can't locate object method "author" via package "MyDB::Book" at
test.t line 16.
test....NOK 2/3# Looks like you planned 3 tests but only ran 2.
# Looks like you failed 1 test of 2 run.
# Looks like your test died just after 2.
test....dubious
Test returned status 255 (wstat 65280, 0xff00)
DIED. FAILED tests 2-3
Failed 2/3 tests, 33.33% okay
Failed Test Stat Wstat Total Fail List of Failed
------------------------------------------------------------------------
-------
test.t 255 65280 3 3 2-3 Failed 1/1 test scripts. 2/3 subtests failed.Files=1, Tests=3, 0 wallclock secs ( 0.33 cusr + 0.06 csys = 0.39 CPU)
Failed 1/1 test programs. 2/3 subtests failed.
package MyDB::Author;
use warnings;
use strict;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/ Core /);
__PACKAGE__->table('authors');
__PACKAGE__->add_columns(
id => {
data_type => 'INTEGER',
is_nullable => 0,
is_auto_increment => 1,
},
name => {
data_type => 'VARCHAR',
size => 150,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many( 'books' => 'MyDB::Book', 'author' );
1;
package MyDB::Book;
use warnings;
use strict;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/ Core /);
__PACKAGE__->table('books');
__PACKAGE__->add_columns(
id => {
data_type => 'INTEGER',
is_nullable => 0,
is_auto_increment => 1,
},
title => {
data_type => 'VARCHAR',
size => 150,
is_nullable => 0,
},
author => {
accessor => 'author_id',
data_type => 'INTEGER',
is_nullable => 0,
is_foreign_key => 1,
},
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->belongs_to( 'author' => 'MyDB::Author', 'author' );
1;
package MyDB; use strict; use warnings; use base qw/DBIx::Class::Schema/; __PACKAGE__->load_classes(qw/Author Book/); 1;
test.t
Description: Binary data
_______________________________________________ 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]/
