[Dbix-class] problem using model->search: only one item is retrieved

Fernan Aguero fernan at iib.unsam.edu.ar
Thu Jun 15 16:03:42 CEST 2006


Hi!

I've a test DB with two items:

gene_id= 1, gene_name= lanosterol demethylase
gene_id = 2, gene_name= lanosterol demethylase

(there are other columns where the two genes differ)

mysql> select gene_name FROM genes;
+------------------------+
| gene_name              |
+------------------------+
| lanosterol demethylase | 
| lanosterol demethylase | 
+------------------------+
2 rows in set (0.00 sec)

mysql> select gene_id FROM genes WHERE gene_name='lanosterol demethylase';
+---------+
| gene_id |
+---------+
|       1 | 
|       2 | 
+---------+
2 rows in set (0.00 sec)


Now, in my catalyst controller I have this:

my $model = $context->model('DB::Genes');
if ($context->request->param('gene_name')) {
  my $name = $context->req->param('gene_name');
  my $geners = $model->search({ gene_name => $name } );
  $context->stash->{geners} = $geners;
  $context->stash->{template} = "genes.tt";
}

and in my genes template:

[% FOREACH obj IN geners.next() %]
[% obj.gene_id %]
[% obj.gene_name %]
[% obj.gene_length %]
et cetera 
[% END %]


However I only get the gene with id=1 listed in the web
page (the same is true if I iterate over the resultset in
the controller and print log info using $context->log->info)

A 'search_literal' didn't work either (only gets gene_id 1)
my $gene_rs = $model->search_literal('gene_name = ?', "$name");

Wasn't 'search' supposed to be different from 'find'?
What am I doing wrong?

Fernan

DBIx-Class-0.06003
DBIx-Class-Loader-0.21
DBIx-Class-Schema-Loader-0.02007
DBI-1.50
DBD-mysql50-3.0003
Catalyst-5.6902
Catalyst-Model-DBIC-0.14




More information about the Dbix-class mailing list