[Cascavel-pm] Duvida DBIC

Donato Azevedo donatoaz em gmail.com
Segunda Dezembro 8 05:14:10 PST 2008


Valeu Eden!

Eu fiz o seguinte, e tou recebendo tuplas repetidas como resultado
quando eu nao passo nenhum parametro

$c->model('CDSModel::Cd')->search({ 'me.titulo' =>
{'like'=>'%'.$cd->{titulo}.'%'},
'artista.nome'=>{'like'=>'%'.$cd->{artista}.'%'},
'musica.titulo'=>{'like'=>'%'.$cd->{musica}.'%'}}, { 'join'=> [
{'artista_cds'=>'artista'},{'faixas'=>'musica'} ] } );

quando eu nao coloco texto nos campos de busca o DBIC me gera o seguinte select:

SELECT COUNT(*) FROM CD me LEFT JOIN Artista_CD artista_cds ON (
artista_cds.id_cd = me.id ) LEFT JOIN Artista artista ON ( artista.id
= artista_cds.id_artista ) LEFT JOIN Faixa faixas ON ( faixas.id_cd =
me.id ) LEFT JOIN Musica musica ON ( musica.id = faixas.id_musica )
WHERE ( artista.nome LIKE ? AND me.titulo LIKE ? AND musica.titulo
like ? ): '%%', '%%', '%%'

dai, eu coloquei um distinct. Funcionou, mas nao sei se é gambiarra:

$c->model('CDSModel::Cd')->search({ 'me.titulo' =>
{'like'=>'%'.$cd->{titulo}.'%'},
'artista.nome'=>{'like'=>'%'.$cd->{artista}.'%'},
'musica.titulo'=>{'like'=>'%'.$cd->{musica}.'%'}}, { 'join'=> [
{'artista_cds'=>'artista'},{'faixas'=>'musica'} ],
'distinct'=>'me.titulo' } );

SELECT COUNT( DISTINCT( me.id ) ) FROM CD me LEFT JOIN Artista_CD
artista_cds ON ( artista_cds.id_cd = me.id ) LEFT JOIN Artista artista
ON ( artista.id = artista_cds.id_artista ) LEFT JOIN Faixa faixas ON (
faixas.id_cd = me.id ) LEFT JOIN Musica musica ON ( musica.id =
faixas.id_musica ) WHERE ( artista.nome LIKE ? AND me.titulo LIKE ?
AND musica.titulo like ? ): '%%', '%%', '%%'

Donato Azevedo
BSEng. Ctrl & Automation - UFMG - 10o per.
"Try not. Do or do not. There is no try."
  -- Master Yoda

na reta final sem hamilton nem timo glock!



On Mon, Dec 8, 2008 at 9:02 AM, Eden Cardim <edencardim em gmail.com> wrote:
> On Mon, Dec 8, 2008 at 1:40 AM, Donato Azevedo <donatoaz em gmail.com> wrote:
>> Pessoal
>>
>> a minha duvida é a seguinte:
>> eu tenho 1 tabela com 2 relacionamentos many_to_many com outras tabelas.
>> para ilustrar
>> A has_many AB;
>> A many_to_many B;
>>
>> A has_many AC;
>> A many_to_many C;
>>
>> como eu faco para buscar todos os A que cujo B relacionado tem
>> B.atributoX like '%x%' e que ao mesmo tempo cujo C relacionado tem
>> C.atributoY like '%y%'?
>>
>> eu consigo fazer isto para um, fazendo
>>
>> $c->model('B')->search_like(...)->search_related(AB)->search_related(A)-search_like(...)
>
> $c->model('A')->search({'b.atributoX' => { '-like' => '%x%' },
> 'c.atributoY' => {'-like' => '%y%'} }, { join => [{ab => 'b'}, { ac =>
> 'c' }] });
>
> --
>   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
>  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
>  Shadowcat Systems Ltd.  Want a managed development or deployment platform?
> http://edenc.vox.com/            http://www.shadowcat.co.uk/servers/
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>


Mais detalhes sobre a lista de discussão Cascavel-pm