[SP-pm] DBIx::Class - Alterar alias
Nilson Santos Figueiredo Jr.
acid06 at gmail.com
Wed Nov 18 12:34:46 PST 2009
2009/11/18 Eutsiv :: Geovanny Junio <geovanny at eutsiv.com.br>:
> - Fazer um consulta usando a tabela1, tabela2 e tabela3.
> - Então vou mostrar ao usuário que ele tem as seguintes colunas para filtrar
> (ou seja todas as colunas de todas as tabelas envolvidas):
> tabela1.coluna1 .. tabela1.colunaN
> tabela2.coluna1 .. tabela2.colunaN
> tabela3.coluna1 .. tabela3.colunaN
>
> Com base nas colunas o usuário poderá criar filtros que eu efetivamente
> usarei no WHERE.
> A necessidade do formato table.column é que a tabela1 pode contar uma coluna
> nome, e a tabela2 também.
> Por exemplo, imagina as 3 tabelas como cidade, cliente, e contratos.
> O usuário pode querer especificar: clientes chamados João (coluna nome), que
> residem na cidade Barueri (coluna nome).
> Essa confusão toda é pq quero deixar a criação de filtros dinâmica, a medida
> que novos campos forem incluidos nas tabelas,
> eles estarão disponíveis quando um usuário for definir um novo filtro.
Sim, eu entendi o seu problema.
Como eu disse, é só você ler a documentação e o cookbook que eles te
ensinam a fazer queries mais complexas usando a sintaxe do DBIC (na
verdade, SQL::Abstract).
O nome do alias será sempre o nome do relacionamento, exceto pra
tabela atual, que sera "me".
Então, vamos supor que exista a seguinte estrutura: usuário tem um
endereço que pertence a um estado que pertence a um país.
Sua query DBIC para pesquisar pra todos os usuários do Brasil, que
tenham idade maior ou igual a 18 anos, seria algo mais ou menos assim:
my $rs = $schema->resultset('Usuario')->search(
{
'me.idade' => { '>=', 18 },
'pais.name' => 'Brazil'
},
{
join => { endereco => { estado => 'pais' } }
}
);
Com isso, é só você montar a hash de pesquisa e fazer os joins à
medida que for necessário. É mais fácil que gerar SQL.
-Nilson Santos F. Jr.
More information about the SaoPaulo-pm
mailing list