Apenas para facilitar a ajuda http://www.caliburn.nl/topposting.html
Em 21 de agosto de 2012 09:32, Jose Nilton <[email protected]> escreveu: > > 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. > Há uma tendência em manter mínimo o Model do Catalyst, aquele que você cria com o myapp_create.pl e fica hospedado em ./lib/MyApp/Model/MyModel.pm. A forma mais fácil e direta de construir um Model é vinculá-lo diretamente a um Schema. Os Schema normalmente possui n (vários) ResultSet, normalmente correspondentes às tabelas existente no seu banco de dados. Há vários benefícios em usar um ORM e a DBIx::Class é certamente a melhor opção Perl e uma das melhores opções do mercado, mas ainda é um ORM e, certamente, escrever o SQL na mão e obter todo o resultado como um HASH inflado não é exatamente o melhor uso para qualquer ORM, seja a DBIx::Class ou o Hibernate. Talvez você já esteja se perguntando como fazer para não ter de incluir o HashReInflator em todas as suas chamadas, não está? Enfim, se você não vai usar os recursos do ORM como ORM e tem de dar uma volta gigante para que a DBIx::Class funcione para você como a DBI funciona, será que você não quer dar um passo atrás e usar a DBI a partir de uma classe utilitária? Tipo MyApp::DAO::Whatever ? Por outro lado há a opção de que você esteja preso a uma realidade pré-ORM e, talvez, possa experimentar a DBIx::Class como um ORM? Não há uma resposta única e correta. Tudo depende da sua aplicação e da arquitetura que você está usando. Pergunta: você seguiu o http://search.cpan.org/~zarquon/Catalyst-Manual-5.9004/lib/Catalyst/Manual/Tutorial.pod alguma vez? Aplicações «simples» às vezes podem ser resolvidas apenas com os exemplos que estão ali. 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 > >
=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
