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

Renato Santos renato.cron at gmail.com
Tue Aug 21 06:17:25 PDT 2012


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 at 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 at 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 at 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 at 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 at 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 at 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 at gmail.com>escreveu:
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2012/8/21 Jose Nilton <jniltinho at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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/#!/renato_cron>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120821/9e190e7b/attachment-0001.html>


More information about the SaoPaulo-pm mailing list