[Dbix-class] prefetch problem
Ronald J Kimball
rkimball at pangeamedia.com
Fri Aug 13 14:54:29 GMT 2010
On Fri, Aug 13, 2010 at 10:39 AM, Marc Perez <markkus.80 at gmail.com> wrote:
> 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"
Because "fieldfiles" is a has_many relationship, calling the accessor
in scalar context returns a resultset object, not a row object. You
probably want to do one of these:
while (my $file = $files->next) {
my $fieldfiles = $file->fieldfiles;
while (my $fieldfile = $fieldfiles->next) {
print $fieldfile->name;
}
}
while (my $file = $files->next) {
foreach my $fieldfile ($file->fieldfiles) {
print $fieldfile->name;
}
}
You could also do something like this:
while (my $file = $files->next) {
print join ", ", $file->fieldfiles->get_column('name')->all;
}
Ronald
More information about the DBIx-Class
mailing list