[SP-pm] Catalyst DBIx -> lista alguns campos
Renato Santos
renato.cron at gmail.com
Tue Aug 21 05:45:17 PDT 2012
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/#!/renato_cron>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120821/46cdf729/attachment.html>
More information about the SaoPaulo-pm
mailing list