[Dbix-class] create() with has_one related object broken

Peter Rabbitson rabbit+dbic at rabbit.us
Mon Jun 8 12:45:45 GMT 2009


Hermida, Leandro wrote:
> Hello,
> 
>  
> 
> Following the documentation it seems like create() with a has_one
> related object is broken in 0.08103?
> 
>  
> 
> I have in MyDB::Study.pm
> 
>  
> 
> __PACKAGE__->load_components(qw( PK::Auto  Core ));
> 
> __PACKAGE__->table('study');
> 
> __PACKAGE__->add_columns('id' => {
> 
>                              data_type         => 'integer',
> 
>                              is_nullable       => 0,
> 
>                              is_auto_increment => 1,
> 
>                              extra             => { unsigned => 1 },
> 
>                          },
> 
>                          'name' => {
> 
>                              data_type         => 'varchar',
> 
>                              size              => 1000,
> 
>                              is_nullable       => 0,
> 
>                          },
> 
>                          'source_data_file_id_type' => {
> 
>                              data_type         => 'varchar',
> 
>                              size              => 100,
> 
>                              is_nullable       => 0,
> 
>                          },
> 
>                          'description' => {
> 
>                              data_type         => 'text',
> 
>                              is_nullable       => 1,
> 
>                          },);
> 
> __PACKAGE__->set_primary_key('id');
> 
> __PACKAGE__->has_one('source_data_file' =>
> 'MyDB::Study::SourceDataFile', 'study_id');
> 
>  
> 
> I have in MyDB::Study::SourceDataFile.pm
> 
>  
> 
> __PACKAGE__->load_components(qw( PK::Auto  Core ));
> 
> __PACKAGE__->table('study_source_data_file');
> 
> __PACKAGE__->add_columns('study_id' => {
> 
>                              accessor          => 'study',
> 
>                              data_type         => 'integer',
> 
>                              is_nullable       => 0,
> 
>                              is_foreign_key    => 1,
> 
>                              extra             => { unsigned => 1 },
> 
>                          },
> 
>                          'data' => {
> 
>                              data_type         => 'longtext',
> 
>                              is_nullable       => 0,
> 
>                          },);
> 
> __PACKAGE__->set_primary_key('study_id');
> 
> __PACKAGE__->belongs_to('study' => 'MyDB::Study', 'study_id');
> 
>  
> 
>  
> 
> If I try like the documentation says to do in create() with a  has_one
> relationship, with an arrayref of hashrefs:
> 
>  
> 
> my $study = $odm_db->resultset('Study')->create(
> 
>     {
> 
>       name                     => $study_name,
> 
>       source_data_file_id_type => $id_type,
> 
>       description              => $study_desc,
> 
>       source_data_file         => [
> 
>           { data => $source_file_data }
> 
>       ],
> 
>     }
> 
> );
> 
>  
> 
> I get the error  “DBIx::Class::ResultSet::create(): new_result needs a hash”
> 
>  
> 
> So then I just guessed and tried with just a hashref:
> 
>  
> 
> my $study = $odm_db->resultset('Study')->create(
> 
>     {
> 
>       name                     => $study_name,
> 
>       source_data_file_id_type => $id_type,
> 
>       description              => $study_desc,
> 
>       source_data_file         => {
> 
>           data => $source_file_data
> 
>       },
> 
>     }
> 
> );
> 
>  
> 
> And here I get another error  “DBIx::Class::ResultSet::create(): DBI Exception: DBD::mysql::st execute failed: Incorrect integer value: 'MyDB::Study=HASH(0x7f915d105068)' for column 'study_id' at row 1 [for Statement "INSERT INTO study_source_data_file ( data, study_id) VALUES ( ?, ? )" with ParamValues: 0='<data here…>', 1=’MyDB::Study=HASH(0x7f915d105068)']”
> 
>  
> 
> What could I be doing wrong?
> 

Not sure at this point. Could you package your test schema and send it
along with the tests above as a tarball to the list? Thanks.



More information about the DBIx-Class mailing list