[Dbix-class] Unrequested insertion
Xavier Robin
robin0 at etu.unige.ch
Wed Jan 24 13:35:23 GMT 2007
Hello,
I'm facing a weird problem with DBIx::Class (used through Catalyst).
> Caught exception in
> MIAPE::Controller::Experiment::Gel::Detection->make_detection_widget
> "DBIx::Class::AccessorGroup::__ANON__(): Error executing 'INSERT INTO
> gel.detection_reagents_buffers (detection_reagents_buffers_id) VALUES (?)':
> ERROR: null value in column "reagents_buffers" violates not-null
> constraint"
Well, this constraint exists, but the fact is I wasn't trying to insert
anything into the database.
I have simplified the problem as much as I could to get a minimal code that
triggers this behaviour. Here is the stack trace (with complete code of the
action!):
> Stack Trace
> Package Line File
> MIAPE::Controller::Experiment::Gel::Detection
32 /(...)/MIAPE/lib/MIAPE/Controller/Experiment/Gel/Detection.pm
>
> 29: sub make_detection_widget : Global {
> 30: my ($self, $c) = @_;
> 31: my @buffers_Objs =
> $c->model('MIAPEDB::User::UserDetectionReagentsBuffers')->all;
> 32: my %buffers = map {
> 33: "buffers" => $_->detection_reagents_buffers->reagents_buffers
> 34: }, @buffers_Objs;
> 35: }
My action has just these 7 lines of code.
I really don't understand why
the "$_->detection_reagents_buffers->reagents_buffers" instruction ends up
with an INSERT INTO !
I use nearly exact copies of that elsewhere (except that on other table and
with other field names), and it works as expected (i.e. the values are pushed
into the hash).
Do someone know where this come from, or has the slightest idea of how I could
get rid of it and issue a SELECT ... FROM instead ?
I tried
$_->detection_reagents_buffers->get_column('reagents_buffers') to explicitly
get (and not set) the column, but I get the same error.
Below I include the models of the two tables involved.
Thank you in advance for any help !
Xavier
=============================================================================
lib/MIAPEDB/Gel/DetectionReagentsBuffers.pm
> package MIAPEDB::Gel::DetectionReagentsBuffers;
> use base qw/DBIx::Class/;
> use utf8;
> __PACKAGE__->load_components(qw/UTF8Columns PK::Auto Core/);
> __PACKAGE__->table('gel.detection_reagents_buffers');
> __PACKAGE__->add_columns(qw/detection_reagents_buffers_id
> reagents_buffers/);
> __PACKAGE__->set_primary_key(qw/detection_reagents_buffers_id/);
> __PACKAGE__->add_unique_constraint([qw/reagents_buffers/]);
> __PACKAGE__->utf8_columns(qw/reagents_buffers/);
> __PACKAGE__->has_many('user_detection_reagents_buffers' =>
> 'MIAPEDB::User::UserDetectionReagentsBuffers',
> 'detection_reagents_buffers');
> 1;
=============================================================================
lib/MIAPEDB/User/UserDetectionReagentsBuffers.pm
> package MIAPEDB::User::UserDetectionReagentsBuffers;
> use base qw/DBIx::Class/;
> use utf8;
> __PACKAGE__->load_components(qw/UTF8Columns PK::Auto Core/);
> __PACKAGE__->table('users.user_detection_reagents_buffers');
> __PACKAGE__->add_columns(qw/owner detection_reagents_buffers short_name/);
> __PACKAGE__->set_primary_key(qw/owner short_name/);
> __PACKAGE__->add_unique_constraint([qw/owner detection_reagents_buffers
> short_name/]); __PACKAGE__->utf8_columns(qw/short_name/);
> __PACKAGE__->belongs_to('detection_reagents_buffers' =>
> 'MIAPEDB::Gel::DetectionReagentsBuffers', 'detection_reagents_buffers');
> 1;
More information about the Dbix-class
mailing list