[Dbix-class] create() with has_one related object broken
Peter Rabbitson
rabbit+dbic at rabbit.us
Mon Jun 8 17:50:05 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?
>
Also did this work on 0.08102 ?
More information about the DBIx-Class
mailing list