When I upgraded from 7.006 to 8.003, the following (illustrative) code
stoppped working:
package My::Schema::Zoo;
use strict;
use base qw(DBIx::Class);
__PACKAGE__->load_components(qw/Core/);
__PACKAGE__->table('tblzoo');
__PACKAGE__->add_columns(qw(zoo_id name));
__PACKAGE__->set_primary_key('zoo_id');
__PACKAGE__->has_many(animals => 'My::Schema::Animal', 'zoo_id');
package My::Schema::Animal;
use strict;
use base qw(DBIx::Class);
__PACKAGE__->load_components(qw/Core/);
__PACKAGE__->table('tblanimal');
__PACKAGE__->add_columns(qw(animal_id zoo_id type));
__PACKAGE__->set_primary_key('animal_id');
__PACKAGE__->belongs_to(zoo => 'My::Schema::Zoo', 'zoo_id');
__PACKAGE__->add_unique_constraint(
one_type_per_zoo => [ qw(zoo_id type) ],
);
...
my $zoo_rs = $schema->resultset('Zoo')->search();
while (my $zoo = $zoo_rs->next) {
populate($zoo);
}
...
sub populate {
my $zoo = shift;
foreach my $type(qw(lion tiger elephant)) {
my $animal = $zoo->find_or_create_related(
'animals',
{ type => $type },
);
}
}
notes:
- the error I get is
"DBIx::Class::Relationship::Base::find_or_create_related(): Can't locate
DBI object method "last_insert_rowid" via package "DBD::mysql::db" at
/usr/local/share/perl/5.8.8/DBIx/Class/Storage/DBI.pm line 1173."
- the error only occurs if it needs to create an Animal - if all the
corresponding rows already exist in tblanimal, it works fine.
- this code works fine:
my $zoo = $schema->resultset('Zoo')->find(1);
populate($zoo);
Is there something wrong with my code that was allowed to work in 7.006
but not in 8.003? Is anyone else having this problem? I've tried it on
two different OS's (Ubuntu, OS X), and seen the same problem.
Thanks,
Steve
_______________________________________________
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/dbix-class@lists.rawmode.org/