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

Jose Nilton jniltinho at gmail.com
Tue Aug 21 06:34:18 PDT 2012


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



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"
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120821/c323e592/attachment-0001.html>


More information about the SaoPaulo-pm mailing list