[Dbix-class] prefetch problem

Marc Perez markkus.80 at gmail.com
Fri Aug 13 14:39:08 GMT 2010


Hi,
My name is Marc, I'm not use to write to the list but I have a problem
which I dont know exactly how to solve.
I have this two models:

FIRST:
package cmsDB::Files;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("files");
__PACKAGE__->add_columns(
 "file_id",
 { data_type => "INT", default_value => undef, is_nullable => 0, size => 10 },
......
__PACKAGE__->has_many(
 "fieldfiles",
 "cmsDB::Fieldfiles",
 { "foreign.file_id" => "self.file_id" },
);

SECOND:
package cmsDB::Fieldfiles;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("fieldfiles");
__PACKAGE__->add_columns(
 "file_id",
 { data_type => "INT", default_value => undef, is_nullable => 0, size => 10 },
 "language_id",
 { data_type => "INT", default_value => undef, is_nullable => 0, size => 10 },
 "name",
 {
   data_type => "VARBINARY",
   default_value => undef,
   is_nullable => 1,
   size => 250,
 },
........
__PACKAGE__->set_primary_key("file_id", "language_id");
__PACKAGE__->belongs_to("file_id", "cmsDB::Files", { file_id => "file_id" });
__PACKAGE__->belongs_to(
 "language_id",
 "cmsDB::Languages",
 { language_id => "language_id" },
);


I'm doing the next query:
my $files = $catVar->model('cmsDB::Files')->search(
                       {
                               'me.cmsobj_id' => $this->cmsobj_id,
                               -or => [mime_type => 'image/jpeg',mime_type =>
'image/gif',mime_type => 'image/png'],
                               'fieldfiles.language_id' => $langId
                       },
                       {
               join => 'fieldfiles',
               prefetch => 'fieldfiles'
                       }
               );

When I try to access the fieldfiles data:

while( my $file = $files->next() ) {
print($file->fieldfiles->name)
}

I get the error:
Can't locate object method "name" via package "DBIx::Class::ResultSet"

If I dump $file->fieldfiles:

$Data::Dumper::Indent = 3;
$Data::Dumper::Maxdepth = 3;
Dumper($file->fieldfiles->name)

I get this:

$VAR1 = bless( { '_source_handle' => bless( { 'source_moniker' =>
'Fieldfiles', 'schema' => bless( { 'class_mappings' =>
'HASH(0xa521c78)', 'source_registrations' => 'HASH(0xa5220c8)',
'storage' => 'DBIx::Class::Storage::DBI::mysql=HASH(0xa52e4b8)' },
'cmsDB' ) }, 'DBIx::Class::ResultSourceHandle' ), '_in_storage' => 1,
'_column_data' => { 'link' => '', 'language_id' => '1', 'name' =>
'Jamón y Queso - Botiga', 'file_id' => '5', 'description' => '' } },
'cms::Model::cmsDB::Fieldfiles' );


Maybe Im doing something wrong...
I would really appreciate any help.

Thanks

Marc Pérez



More information about the DBIx-Class mailing list