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?
Leandro