Desconozco en qué formato hay que generar la estructura de datos para pasarla a JSON, pero lo que sí veo es el tema de la consulta.
Using perl Syntax Highlighting
sub store :Local :Args(0) {
my ($self, $c) = @_;
# conectar a la base de datos
my $dbh = DBI->connect("DBI:mysql:database=datatest", "perltestUser", "test")
or die $DBI::errstr;
# consuta a la tabla
my $statement = qq{SELECT * FROM staff};
my $sth = $dbh->prepare($statement)
or die $dbh->errstr;
$sth->execute()
or die $sth->errstr;
while (my @query_store = $sth->fetchrow_array)
{
my $result_query = Result_query->new(@query_store); # creamos un objeto $result_query con el resultado de la consulta
push @{ $c->stash->{store} }, $query_store; # almacenamos el objeto en un array dentro de la clave 'store' del hash devuelto por stash
}
$c->forward('View::JSON');
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Como no tengo ni idea de Catalyst, lo más seguro es que la construcción de la estructura de datos esté mal, pero lo importante es que veas cómo se hace el bucle y se va guardando el resultado. A propósito: realmente no necesitarías guardar la consulta en forma de objeto. Con guardar los elementos que se extraen de la base de datos, creo que vale para formar el JSON.
Por ejemplo,
en este hilo puedes ver que van recuperando información por líneas, almacenándolas en un array, y luego guardando el
array en el
stash.
Sería algo así:
Using perl Syntax Highlighting
sub store :Local :Args(0) {
my ($self, $c) = @_;
# conectar a la base de datos
my $dbh = DBI->connect("DBI:mysql:database=datatest", "perltestUser", "test")
or die $DBI::errstr;
# consuta a la tabla
my $statement = qq{SELECT * FROM staff};
my $sth = $dbh->prepare($statement)
or die $dbh->errstr;
$sth->execute()
or die $sth->errstr;
my @filas;
my
while (my @query_store = $sth->fetchrow_array)
{
my %hash;
# inicializamos el %hash con los valores del @query_store
@hash{ qw(
staff_id
first_name
last_name
address_id
picture
email
store_id
active
username
password
last_update
) } = @query_store;
push @filas, \%hash; # ya podemos guardar el %hash en el almacén de @filas
}
$c->stash->{store} = \@filas; # ponemos todas las @filas en el 'store'
$c->forward('View::JSON');
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Lo dicho: no lo he probado. Pero ya ves que te libras del Result_query.
La línea @hash ... es la forma corta(*) de escribirlo así:
Using perl Syntax Highlighting
$hash{staff_id } = $query_store[ 0];
$hash{first_name } = $query_store[ 1];
$hash{last_name } = $query_store[ 2];
$hash{address_id } = $query_store[ 3];
$hash{picture } = $query_store[ 4];
$hash{email } = $query_store[ 5];
$hash{store_id } = $query_store[ 6];
$hash{active } = $query_store[ 7];
$hash{username } = $query_store[ 8];
$hash{password } = $query_store[ 9];
$hash{last_update} = $query_store[10];
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
(*) se puede escribir de otras maneras.