<div class="gmail_quote">Apenas para facilitar a ajuda <a href="http://www.caliburn.nl/topposting.html">http://www.caliburn.nl/topposting.html</a></div><div class="gmail_quote"><br></div><div class="gmail_quote">Em 21 de agosto de 2012 09:32, Jose Nilton <span dir="ltr"><<a href="mailto:jniltinho@gmail.com" target="_blank">jniltinho@gmail.com</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>Como eu posso acessar desse modo ?<br><br>my $rs = $c->model('Agencias::Users')->search(undef, {columns => [qw/ id name adm email/]});<br>
$rs->result_class('DBIx::Class::ResultClass::HashRefInflator');<br>
<br>Na minha função.<br><br>Quero organizar as consultas no model, para não ficar poluído o Controller. <br></blockquote><div><br></div><div>Há uma tendência em manter mínimo o Model do Catalyst, aquele que você cria com o <a href="http://myapp_create.pl">myapp_create.pl</a> 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.</div>
<div> </div><div>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.</div>
<div><br></div><div>Talvez você já esteja se perguntando como fazer para não ter de incluir o HashReInflator em todas as suas chamadas, não está?</div><div><br></div><div>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 ?</div>
<div><br></div><div>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.</div>
<div><br></div><div>Pergunta: você seguiu o <a href="http://search.cpan.org/~zarquon/Catalyst-Manual-5.9004/lib/Catalyst/Manual/Tutorial.pod">http://search.cpan.org/~zarquon/Catalyst-Manual-5.9004/lib/Catalyst/Manual/Tutorial.pod</a> alguma vez? Aplicações «simples» às vezes podem ser resolvidas apenas com os exemplos que estão ali.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote">Em 21 de agosto de 2012 08:44, Jose Nilton <span dir="ltr"><<a href="mailto:jniltinho@gmail.com" target="_blank">jniltinho@gmail.com</a>></span> escreveu:<div>
<div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Desculpe foi só para ilustrar:<br><br>Está assim:<br><br>Banco: Agencias:<br>Tabela: users<br>Colunas: name, email, passwd, active, adm, create<br>

<br><br>Mas fiz assim:<br><br>sub retorna_mod_adm {<div><br>    my ($self) = @_;<br>
   <br>        my $res = eval {<br></div>            $self->storage->dbh->selectrow_hashref( "SELECT email,name,adm FROM postfix_users WHERE adm = 2");<div>        };<br>        do { print $@; return undef } if $@;<br>


        return $res;<br> <br>}<br><br><br><br></div>Essa função está no arquivo:<br>Myapp/lib/Model/Agencias.pm<br><br><br><br><br><div class="gmail_quote">Em 21 de agosto de 2012 08:33, Renato Santos <span dir="ltr"><<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>></span> escreveu:<div>

<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Pera, só uma duvida.<div><br></div><div>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)</div>


<div><div>

<div><br></div><div><br><br><div class="gmail_quote">2012/8/21 Jose Nilton <span dir="ltr"><<a href="mailto:jniltinho@gmail.com" target="_blank">jniltinho@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




Corrigindo:<br><br>No arquivo Myapp/lib/Schema/Users.pm não funciona,<br><br>Só no Model:<br><br>Myapp/lib/Model/Users.pm<div><br><br><br>sub retorna_hora_do_banco {<br>    my ($self) = @_;<br>   <br></div>      my $res = eval {<br>




            $self->storage->dbh->selectrow_hashref( "select current_time() as foo");<div><br>
        };<br>        do { print $@; return undef } if $@;<br>        return $res;<br>   <br>}<br><br></div>Funcionou corretamente<br><br><div class="gmail_quote">Em 21 de agosto de 2012 08:24, Renato Santos <span dir="ltr"><<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>></span> escreveu:<div>




<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br></div><div><br></div><div><br><div class="gmail_quote"><div>2012/8/21 Jose Nilton <span dir="ltr"><<a href="mailto:jniltinho@gmail.com" target="_blank">jniltinho@gmail.com</a>></span><br>





<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Assim funcionou,<br><br>Na<br>Myapp/lib/Schema/Users.pm<br><br>Coloquei:<div><br><br>sub retorna_hora_do_banco {<br>    my ($self) = @_;<br>   <br>        return "Ola mundo";<br>   <br>}<br><br><br></div>

No controller:<br><br>
my $olaMundo = $c->model('Schema::Users')->retorna_hora_do_banco();<br><br><br> $c->log->debug("Debug App: ".$olaMundo);<br><br><br>Como coloco alguma consulta SQL na função retorna_hora_do_banco ?<br>







<br></blockquote></div><div><div> <span style="color:rgb(34,34,34);font-size:13px;font-family:'courier new',monospace">$self->storage->dbh-></span><span style="color:rgb(34,34,34);font-size:13px;font-family:'courier new',monospace">selectrow_hashref( "select current_time() as foo",</span></div>







<div style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif"><font face="courier new, monospace">                undef, @args );</font></div></div></div><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Pois queria colocar algumas consultas e retornar o array já convertido em json<br><br></blockquote><div> Você quer dizer retornar em array e converter pra JSON no controller->view ! não troquemos o lugar das coisas!</div>







<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br><br><br><div class="gmail_quote">Em 20 de agosto de 2012 23:41, Renato Santos <span dir="ltr"><<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>></span> escreveu:<div>







<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><font face="arial, helvetica, sans-serif">mas o Model <b>!=</b> Schema..</font><div><div><font face="arial, helvetica, sans-serif"><br>








</font></div><div><font face="arial, helvetica, sans-serif">"Can't locate object method "retorna_hora_do_banco" via package "DBIx::Class::ResultSet"</font></div>

</div><div><font face="arial, helvetica, sans-serif">vc tentou $resultset->retorna_hora_do_banco</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">deve ser: $resultset->result_source->schema->retorna_hora_do_banco(..)</font></div>










<div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">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.</font></div>








<div><div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"><br></font><br><div class="gmail_quote">2012/8/20 Jose Nilton <span dir="ltr"><<a href="mailto:jniltinho@gmail.com" target="_blank">jniltinho@gmail.com</a>></span><br>










<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Opa Leonardo, desse modo funcionou,<br><br>Essa era a minha logica no primeiro post.<br> <br><br><div class="gmail_quote">










Em 20 de agosto de 2012 18:31, Leonardo Ruoso <span dir="ltr"><<a href="mailto:leonardo@ruoso.com" target="_blank">leonardo@ruoso.com</a>></span> escreveu:<div><div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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. <br>












<br><div class="gmail_quote">Em 20 de agosto de 2012 18:24, Jose Nilton <span dir="ltr"><<a href="mailto:jniltinho@gmail.com" target="_blank">jniltinho@gmail.com</a>></span> escreveu:<div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">












<br>Fiz esse teste:<br><br>"Can't locate object method "<font face="courier new, monospace">retorna_hora_do_banco</font>" via package "DBIx::Class::ResultSet"<br><br><br>sub <font face="courier new, monospace">retorna_hora_do_banco</font> {<br>













    my ($self) = @_;<br>    <br>        return "Ola mundo";<br>    <br>}<br><br><br>Coloquei no arquivo Myapp/lib/Schema/Schema.pm<br><br><br></blockquote></div></div></div></blockquote></div></div></div></blockquote>








</div></div></div></div></blockquote></div></div><br><br clear="all"><div><div><br>-- <br>.................................................................<br>  "Com Deus todas as coisas são possíveis"<br>


</div></div><br></div><div>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></div></blockquote></div><div><br><br clear="all"><div><br></div>-- <br><div><span style="color:rgb(51,51,51);font-size:x-small">Saravá,</span></div><div><span style="color:rgb(51,51,51);font-size:x-small">Renato CRON</span></div>







<div><div style="text-align:right"><font color="#333333" size="1"><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a></font></div></div><div style="text-align:right"><font color="#333333" size="1"><a href="http://twitter.com/#%21/renato_cron" target="_blank">@renato_cron</a></font></div>







<br>
</div></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div></div></div><div><div><br><br clear="all"><br>-- <br>.................................................................<br>  "Com Deus todas as coisas são possíveis"<br>


</div></div><br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><span style="color:rgb(51,51,51);font-size:x-small">Saravá,</span></div><div><span style="color:rgb(51,51,51);font-size:x-small">Renato CRON</span></div>




<div><div style="text-align:right"><font color="#333333" size="1"><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a></font></div></div><div style="text-align:right"><font color="#333333" size="1"><a href="http://twitter.com/#%21/renato_cron" target="_blank">@renato_cron</a></font></div>




<br>
</div>
</div></div><br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div></div></div><div><div><br><br clear="all"><br>-- <br>.................................................................<br>  "Com Deus todas as coisas são possíveis"<br>

</div></div></blockquote></div></div></div><div class="HOEnZb"><div class="h5"><br><br clear="all"><br>-- <br>.................................................................<br>  "Com Deus todas as coisas são possíveis"<br>

</div></div><br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br>