my @rs = $self->resultset('Users')->search_rs( undef, { result_class =>
'DBIx::Class::ResultClass::HashRefInflator' } )->all();2012/8/21 Jose Nilton <[email protected]> > Corrigindo > > Caught exception in Antispam::View::JSON->process "encountered object > 'Myapp::Model::Agencias::Users=HASH(0x56687e8)', but neither allow_blessed > nor convert_blessed settings are enabled at (eval 862) line 151." > > > sub retorna_todos_users { > > my $self = shift; > my @rs = $self->resultset('Users')->all(); > > #my $rs = $c->model('DB::Agencias::Users')->search({adm => 1}, {columns > => [qw/ id name email/]}); > > return \@rs; > > } > > Como eu faço para transformar em um hashref > > > > Em 21 de agosto de 2012 10:17, Renato Santos <[email protected]>escreveu: > > cara, o ->all retorna array, nao arrayref. >> >> vc ta recebendo um número ou seu perl é muito bizarro e ta considerando >> my ($rs) = ... e retornando o primeiro. >> >> sub retorna_total_users { >> my $self = shift; >> my @rs = $self->resultset('Users')->all(); >> >> return wantarray ? @rs : \@rs; >> >> } >> >> 2012/8/21 Jose Nilton <[email protected]> >> >>> Consegui fazer assim: >>> >>> >>> sub retorna_total_users { >>> my $self = shift; >>> my $rs = $self->resultset('Users')->all(); >>> >>> return $rs; >>> >>> } >>> >>> >>> >>> Em 21 de agosto de 2012 09:45, Renato Santos >>> <[email protected]>escreveu: >>> >>> Mas então cara, >>>> >>>> se é pra não ficar poluido, e as consultas não são SQL escrito por você >>>> "byhand", você usa resultsets para organizar. >>>> >>>> Tem isso no cookbook: >>>> >>>> http://search.cpan.org/~frew/DBIx-Class-0.08198/lib/DBIx/Class/Manual/Cookbook.pod >>>> >>>> Mas, dá uma olhada nesse projeto aqui: >>>> https://github.com/renatocron/RNSP-PCS/tree/master/lib/RNSP/PCS >>>> >>>> >>>> Dentro da pasta Schema, temos: >>>> https://github.com/renatocron/RNSP-PCS/tree/master/lib/RNSP/PCS/Schema >>>> Result / Resultset / Roles >>>> >>>> Result são suas tabelas >>>> Resultset são várias linahs de uma tabelas >>>> e roles são para mudar o comportamento das classes, no caso, um atalho >>>> para não ficar escrevendo toda >>>> hora $rs->result_class('DBIx::Class::ResultClass::HashRefInflator'); >>>> >>>> fazendo um "with 'RNSP::PCS::Schema::Role::InflateAsHashRef';" dentro >>>> do resultset, torna possivel o retorno em hashref da consulta apenas com >>>> $rs->as_hashref >>>> >>>> Nesse cara, >>>> https://github.com/renatocron/RNSP-PCS/blob/master/lib/RNSP/PCS/Schema/ResultSet/User.pm >>>> ta >>>> com algumas coisas a mais de Data::Verifier, mas você pode adicionar uma >>>> >>>> sub retorna_registros_do_xpto {return shift->search({'xpto' => >>>> 1})->as_hashref->all ) >>>> e ja vai retornar uma *array de hash *ai no seu controller, ficaria >>>> >>>> my @xptos = $c->model('Agencias::Users')->retorna_registros_do_xpto >>>> ; >>>> $c->stash->{json} = { linhas => \@xptos} >>>> $c->forward /view json../ >>>> >>>> 2012/8/21 Jose Nilton <[email protected]> >>>> >>>>> >>>>> Como eu posso acessar desse modo ? >>>>> >>>>> my $rs = $c->model('Agencias::Users')->search(undef, {columns => >>>>> [qw/ id name adm email/]}); >>>>> $rs->result_class('DBIx::Class::ResultClass::HashRefInflator'); >>>>> >>>>> Na minha função. >>>>> >>>>> >>>>> Quero organizar as consultas no model, para não ficar poluído o >>>>> Controller. >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> Em 21 de agosto de 2012 08:44, Jose Nilton <[email protected]>escreveu: >>>>> >>>>> >>>>>> Desculpe foi só para ilustrar: >>>>>> >>>>>> Está assim: >>>>>> >>>>>> Banco: Agencias: >>>>>> Tabela: users >>>>>> Colunas: name, email, passwd, active, adm, create >>>>>> >>>>>> >>>>>> Mas fiz assim: >>>>>> >>>>>> sub retorna_mod_adm { >>>>>> >>>>>> my ($self) = @_; >>>>>> >>>>>> my $res = eval { >>>>>> $self->storage->dbh->selectrow_hashref( "SELECT >>>>>> email,name,adm FROM postfix_users WHERE adm = 2"); >>>>>> >>>>>> }; >>>>>> do { print $@; return undef } if $@; >>>>>> return $res; >>>>>> >>>>>> } >>>>>> >>>>>> >>>>>> >>>>>> Essa função está no arquivo: >>>>>> Myapp/lib/Model/Agencias.pm >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Em 21 de agosto de 2012 08:33, Renato Santos >>>>>> <[email protected]>escreveu: >>>>>> >>>>>> Pera, só uma duvida. >>>>>>> >>>>>>> qual o package que está escrito no seu Myapp/lib/Schema/Users.pm? >>>>>>> pois não faz muito sentido o schema do banco chamar users (seria como se >>>>>>> todas as tabelas fossem de sobre usuarios) >>>>>>> >>>>>>> >>>>>>> >>>>>>> 2012/8/21 Jose Nilton <[email protected]> >>>>>>> >>>>>>>> Corrigindo: >>>>>>>> >>>>>>>> No arquivo Myapp/lib/Schema/Users.pm não funciona, >>>>>>>> >>>>>>>> Só no Model: >>>>>>>> >>>>>>>> Myapp/lib/Model/Users.pm >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> sub retorna_hora_do_banco { >>>>>>>> my ($self) = @_; >>>>>>>> >>>>>>>> my $res = eval { >>>>>>>> $self->storage->dbh->selectrow_hashref( "select >>>>>>>> current_time() as foo"); >>>>>>>> >>>>>>>> }; >>>>>>>> do { print $@; return undef } if $@; >>>>>>>> return $res; >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> Funcionou corretamente >>>>>>>> >>>>>>>> Em 21 de agosto de 2012 08:24, Renato Santos <[email protected] >>>>>>>> > escreveu: >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> 2012/8/21 Jose Nilton <[email protected]> >>>>>>>>> >>>>>>>>>> Assim funcionou, >>>>>>>>>> >>>>>>>>>> Na >>>>>>>>>> Myapp/lib/Schema/Users.pm >>>>>>>>>> >>>>>>>>>> Coloquei: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> sub retorna_hora_do_banco { >>>>>>>>>> my ($self) = @_; >>>>>>>>>> >>>>>>>>>> return "Ola mundo"; >>>>>>>>>> >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> No controller: >>>>>>>>>> >>>>>>>>>> my $olaMundo = >>>>>>>>>> $c->model('Schema::Users')->retorna_hora_do_banco(); >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> $c->log->debug("Debug App: ".$olaMundo); >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Como coloco alguma consulta SQL na função retorna_hora_do_banco ? >>>>>>>>>> >>>>>>>>>> $self->storage->dbh->selectrow_hashref( "select current_time() >>>>>>>>> as foo", >>>>>>>>> undef, @args ); >>>>>>>>> >>>>>>>>>> Pois queria colocar algumas consultas e retornar o array já >>>>>>>>>> convertido em json >>>>>>>>>> >>>>>>>>>> Você quer dizer retornar em array e converter pra JSON no >>>>>>>>> controller->view ! não troquemos o lugar das coisas! >>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Em 20 de agosto de 2012 23:41, Renato Santos < >>>>>>>>>> [email protected]> escreveu: >>>>>>>>>> >>>>>>>>>> mas o Model *!=* Schema.. >>>>>>>>>>> >>>>>>>>>>> "Can't locate object method "retorna_hora_do_banco" via package >>>>>>>>>>> "DBIx::Class::ResultSet" >>>>>>>>>>> vc tentou $resultset->retorna_hora_do_banco >>>>>>>>>>> >>>>>>>>>>> deve ser: >>>>>>>>>>> $resultset->result_source->schema->retorna_hora_do_banco(..) >>>>>>>>>>> >>>>>>>>>>> isso pois o Model só existe no contexto catalyst, e o schema >>>>>>>>>>> serve justamente para vc poder usar o schema do banco em qualquer >>>>>>>>>>> applicação. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> 2012/8/20 Jose Nilton <[email protected]> >>>>>>>>>>> >>>>>>>>>>>> Opa Leonardo, desse modo funcionou, >>>>>>>>>>>> >>>>>>>>>>>> Essa era a minha logica no primeiro post. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Em 20 de agosto de 2012 18:31, Leonardo Ruoso < >>>>>>>>>>>> [email protected]> escreveu: >>>>>>>>>>>> >>>>>>>>>>>> Veja que você está chamando o método retorna_hora_do_banco de >>>>>>>>>>>>> um ResultSet, que deve mapear uma tabela no DB. Eu acho que um >>>>>>>>>>>>> método como >>>>>>>>>>>>> retorna_hora_do_banco poderia estar no seu Model, provavelmente >>>>>>>>>>>>> chamado DB >>>>>>>>>>>>> :-) Eu não me lembro se há um acessor default para retornar a >>>>>>>>>>>>> hora do >>>>>>>>>>>>> banco, acho que não, mas meu primeiro impulso seria colocar esse >>>>>>>>>>>>> método no >>>>>>>>>>>>> seu Model responsável pelo acesso ao DB e chamá-lo desse Model e >>>>>>>>>>>>> não de um >>>>>>>>>>>>> ResultSet. >>>>>>>>>>>>> >>>>>>>>>>>>> Em 20 de agosto de 2012 18:24, Jose Nilton < >>>>>>>>>>>>> [email protected]> escreveu: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>> Fiz esse teste: >>>>>>>>>>>>>> >>>>>>>>>>>>>> "Can't locate object method "retorna_hora_do_banco" via >>>>>>>>>>>>>> package "DBIx::Class::ResultSet" >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> sub retorna_hora_do_banco { >>>>>>>>>>>>>> my ($self) = @_; >>>>>>>>>>>>>> >>>>>>>>>>>>>> return "Ola mundo"; >>>>>>>>>>>>>> >>>>>>>>>>>>>> } >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Coloquei no arquivo Myapp/lib/Schema/Schema.pm >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> ................................................................. >>>>>>>>>> "Com Deus todas as coisas são possíveis" >>>>>>>>>> >>>>>>>>>> =begin disclaimer >>>>>>>>>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>>>>>>>>> SaoPaulo-pm mailing list: [email protected] >>>>>>>>>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>>>>>>>>> =end disclaimer >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Saravá, >>>>>>>>> Renato CRON >>>>>>>>> http://www.renatocron.com/blog/ >>>>>>>>> @renato_cron <http://twitter.com/#%21/renato_cron> >>>>>>>>> >>>>>>>>> >>>>>>>>> =begin disclaimer >>>>>>>>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>>>>>>>> SaoPaulo-pm mailing list: [email protected] >>>>>>>>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>>>>>>>> =end disclaimer >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> ................................................................. >>>>>>>> "Com Deus todas as coisas são possíveis" >>>>>>>> >>>>>>>> =begin disclaimer >>>>>>>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>>>>>>> SaoPaulo-pm mailing list: [email protected] >>>>>>>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>>>>>>> =end disclaimer >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Saravá, >>>>>>> Renato CRON >>>>>>> http://www.renatocron.com/blog/ >>>>>>> @renato_cron <http://twitter.com/#%21/renato_cron> >>>>>>> >>>>>>> >>>>>>> =begin disclaimer >>>>>>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>>>>>> SaoPaulo-pm mailing list: [email protected] >>>>>>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>>>>>> =end disclaimer >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> ................................................................. >>>>>> "Com Deus todas as coisas são possíveis" >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> ................................................................. >>>>> "Com Deus todas as coisas são possíveis" >>>>> >>>>> =begin disclaimer >>>>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>>>> SaoPaulo-pm mailing list: [email protected] >>>>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>>>> =end disclaimer >>>>> >>>>> >>>> >>>> >>>> -- >>>> Saravá, >>>> Renato CRON >>>> http://www.renatocron.com/blog/ >>>> @renato_cron <http://twitter.com/#%21/renato_cron> >>>> >>>> >>>> =begin disclaimer >>>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>>> SaoPaulo-pm mailing list: [email protected] >>>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>>> =end disclaimer >>>> >>>> >>> >>> >>> -- >>> ................................................................. >>> "Com Deus todas as coisas são possíveis" >>> >>> =begin disclaimer >>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>> SaoPaulo-pm mailing list: [email protected] >>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>> =end disclaimer >>> >>> >> >> >> -- >> Saravá, >> Renato CRON >> http://www.renatocron.com/blog/ >> @renato_cron <http://twitter.com/#%21/renato_cron> >> >> >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> >> > > > -- > ................................................................. > "Com Deus todas as coisas são possíveis" > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > > -- Saravá, Renato CRON http://www.renatocron.com/blog/ @renato_cron <http://twitter.com/#!/renato_cron>
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
