[SP-pm] Catalyst DBIx -> lista alguns campos
Renato Santos
renato.cron at gmail.com
Tue Aug 21 06:38:23 PDT 2012
my @rs = $self->resultset('Users')->search_rs( undef, { result_class =>
'DBIx::Class::ResultClass::HashRefInflator' } )->all();
2012/8/21 Jose Nilton <jniltinho at gmail.com>
> 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 at 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 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/#%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/05b02617/attachment-0001.html>
More information about the SaoPaulo-pm
mailing list