Obrigado a todos pela ajuda o Leonardo, o Renato pela paciência.
Vou usar esse e-mail para um tutorial, pois o Catalyst as vezes parece muito complicado, mas complicado é a nossa cabeça, No Catalyst a gente tem que pensar simples que o Framework faz o resto. Em 21 de agosto de 2012 10:44, Leonardo Ruoso <[email protected]> escreveu: > Em 21 de agosto de 2012 10:34, Jose Nilton <[email protected]> escreveu: > > 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 >> > > Você agora está passando um array de objetos para a View e não um array > com os dados que podem ser acessados neste objeto. Era isso que o > HashReInflator fazia para você. Veja > https://metacpan.org/module/DBIx::Class::Row para entender melhor. > > >> 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 >> >> > > =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
