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

Jose Nilton jniltinho at gmail.com
Tue Aug 21 06:14:33 PDT 2012


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


More information about the SaoPaulo-pm mailing list