[SP-pm] Catalyst DBIx -> lista alguns campos

Jose Nilton jniltinho at gmail.com
Tue Aug 21 07:04:16 PDT 2012


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 <leonardo em ruoso.com> escreveu:

> Em 21 de agosto de 2012 10:34, Jose Nilton <jniltinho em gmail.com> 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 <renato.cron em gmail.com>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 <jniltinho em gmail.com>
>>>
>>>> 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 <renato.cron em gmail.com>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 <jniltinho em gmail.com>
>>>>>
>>>>>>
>>>>>> 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 <jniltinho em gmail.com>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 <renato.cron em gmail.com>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 <jniltinho em gmail.com>
>>>>>>>>
>>>>>>>>> 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 <
>>>>>>>>> renato.cron em gmail.com> escreveu:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 2012/8/21 Jose Nilton <jniltinho em gmail.com>
>>>>>>>>>>
>>>>>>>>>>> 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 <
>>>>>>>>>>> renato.cron em gmail.com> 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 <jniltinho em gmail.com>
>>>>>>>>>>>>
>>>>>>>>>>>>> Opa Leonardo, desse modo funcionou,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Essa era a minha logica no primeiro post.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Em 20 de agosto de 2012 18:31, Leonardo Ruoso <
>>>>>>>>>>>>> leonardo em ruoso.com> 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 <
>>>>>>>>>>>>>> jniltinho em gmail.com> 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: SaoPaulo-pm em pm.org
>>>>>>>>>>>  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: SaoPaulo-pm em pm.org
>>>>>>>>>>  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: SaoPaulo-pm em pm.org
>>>>>>>>>  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: SaoPaulo-pm em pm.org
>>>>>>>>  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: SaoPaulo-pm em pm.org
>>>>>>  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: SaoPaulo-pm em pm.org
>>>>>  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: SaoPaulo-pm em pm.org
>>>>  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: SaoPaulo-pm em pm.org
>>>  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: SaoPaulo-pm em pm.org
>>  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: SaoPaulo-pm em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
.................................................................
  "Com Deus todas as coisas são possíveis"
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120821/61829d27/attachment-0001.html>


More information about the SaoPaulo-pm mailing list