[Dbix-class] find_or_create_related not working in 8.003
Steve Caldwell
info-dbic at caldwellhb.com
Wed Jul 18 17:44:47 GMT 2007
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
More information about the Dbix-class
mailing list