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/#!/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
