[Dbix-class] select specific columns on resultset

Jess Robinson castaway at desert-island.me.uk
Thu Apr 11 11:46:50 GMT 2013


Can you show us the complete piece of code for the search/output, and the  
class definitions? That trace looks like you first asked for "Id" only,  
and then later did another query, or called a relation method on the  
result .

This code:

my @recs=$self->db->resultset($self->table)->search({},{columns => [qw/  
id/ ],},)->all;
foreach my $row (@recs) {
   print $row->Name;
}

Should output undefs (or possibly a warning that you didnt fetch that  
column, I forget).

Jess

On Wed, 10 Apr 2013 10:25:14 +0100, max <maxti83 at gmail.com> wrote:

> Ok, sorry, I copied the wrong example, I tried with:
>
> my @recs=$self->db->resultset($self->table)->search({},{columns => [qw/  
> id
> /],},)->all;
>
> but I can see the Name column for example in the foreach loop. After some
> debugging on mysql I found some stranges:
>
> 67 Query     SELECT me.id FROM ReportTemplates me
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '124' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '125' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '126' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '127' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '135' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '136' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '146' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '150' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '177' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '184' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '192' )
> 67 Query     SELECT me.Name FROM ReportTemplates me WHERE ( me.id =  
> '193' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '124' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '125' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '126' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '127' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '135' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '136' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '146' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '150' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '177' )
> 67 Query     SELECT me.id, me.OperationId, me.Name, me.Description,
> me.Content, me.lastLogin, me.prevLogin FROM ReportTemplates me WHERE (
> me.id= '184' )
>
> the first query is correct but the others ? I suspect that is not related
> with dbix, but why I can see column if I have not specified them ?
>
> thanks
>
> 2013/4/10 Peter Rabbitson <rabbit+dbic at rabbit.us>
>
>> On Tue, Apr 09, 2013 at 03:58:53PM +0200, max wrote:
>> > Thanks for the answer, this piece of code is inside a perl sub, I  
>> tried
>> to
>> > extract the array elements as:
>> >
>> > foreach my $row (@recs)
>> > {
>> > my $id=$row->id;
>> > my $name=$row->Name;
>> > print MYFILE "recs name: $name, id: $id\n\n";
>> > }
>> >
>> > and I can see the Name element for example.
>>
>> Well... you asked for it didn't you? (in fact you asked twice)
>>
>> > columns => [qw/id Name OperationId Name /]
>>
>> I am at this point confused what is your problem exactly...
>>
>> > I tried to insert the DBIC_TRACE
>> > in the sub ouputting it to a file but it's always empty (
>> > $self->db->storage->debugfh(IO::File->new('file','w'));), is there
>> another
>> > way to use it ?
>>
>> When you use it this way you also need to ->storage->debug(1) for things
>> to start working. During debugging DBIC_TRACE=1 with dump to screen is
>> much more common, hence why noone answered quuckly ;)
>>
>> Cheers
>>
>> _______________________________________________
>> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
>> IRC: irc.perl.org#dbix-class
>> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
>> Searchable Archive:
>> http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
>>


-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/



More information about the DBIx-Class mailing list