Problema com paginação de uma consulta HABTM

23 views
Skip to first unread message

Lucas Mendonça

unread,
Nov 10, 2009, 1:23:44 PM11/10/09
to cakep...@googlegroups.com
Olá Pessoal,
Seguinte tenho uma relação: Ebooks HABTM Tags.
 
Desejo encontrar todos ebooks relacionadas a uma tag X qualquer. Ou seja, procurar ebooks por tags.
Para simplificar gerei uma consulta utilizando associação hasOne "on the fly" (baseado em Éber Freitas). Segue o código, que está funcionando corretamente:
____
  $this->Ebook->bindModel(array('hasOne' =>  array ('EbooksTag' => array(
               'className' => 'EbooksTag',
               'foreignKey' => 'ebook_id',
               'dependent' => true))), true);
 
   $conditions =  'EbooksTag.tag_id IN ( 44, 45, 46 )';
   $fields = array('DISTINCT Ebook.id', 'Ebook.titulo', 'Ebook.media_votos', 'Ebook.autor_id', 'Autor.nome');
   $this->data = $this->Ebook->findAll($conditions, $fields);
   $this->set( 'ebooks' , $this->data);
___
O código acima gera a seguinte SQL:
SELECT DISTINCT `Ebook`.`id`, `Ebook`.`titulo`, `Ebook`.`media_votos`, `Ebook`.`autor_id`, `Autor`.`nome`, `Ebook`.`id` FROM `ebooks` AS `Ebook` LEFT JOIN `autores` AS `Autor` ON (`Ebook`.`autor_id` = `Autor`.`id`) LEFT JOIN `ebooks_tags` AS `EbooksTag` ON (`EbooksTag`.`ebook_id` = `Ebook`.`id`) WHERE `EbooksTag`.`tag_id` IN (44, 45, 46)
___
 
 
 
Acontece que desejo paginar esta consulta com paginate();
 
Teoricamente funcionaria pois o método paginate() utiliza os mesmos métodos do find(), porém não consegui de nenhuma forma gerar a paginação.
Já fiz vários testes e não obtive resultados. Com o paginate() o cake não está gerando LEFT JOINs.
 
Por exemplo ele gera a SQL:

Query: SELECT `Ebook`.`id`, `Ebook`.`titulo`, `Ebook`.`media_votos`, `Ebook`.`autor_id`, `Autor`.`nome` FROM `ebooks_tags` AS `EbooksTag`   WHERE 1 = 1   ORDER BY `Ebook`.`titulo` asc  LIMIT 24
 
Para o código abaixo:
____
$this->Ebook->bindModel(array('hasOne' =>  array ('EbooksTag' => array(
               'className' => 'EbooksTag',
               'foreignKey' => 'ebook_id',
               'dependent' => true))), true);
 
   $conditions =  'EbooksTag.tag_id IN ( 44, 45, 46 )';
 
   $this->paginate = array(
   'fields' => array('Ebook.id', 'Ebook.titulo', 'Ebook.media_votos', 'Ebook.autor_id', 'Autor.nome'),
   'limit' => 24,       
   'order' => array( 'Ebook.titulo' => 'asc' ) );
   $this->set( 'ebooks' , $this->paginate( $conditions ));
____
 
 
Alguém conhece uma solução?
 
Obrigado.
Abs,
-----------------------------------------------------------------------
Lucas Mendonça
luca...@gmail.com
www.lucasmendonca.com  

Felipe Theodoro

unread,
Nov 10, 2009, 1:30:14 PM11/10/09
to cakep...@googlegroups.com

Lucas Mendonça

unread,
Nov 10, 2009, 9:06:16 PM11/10/09
to cakep...@googlegroups.com
Felipe,
Obrigado!! Consegui resolver meu problema. 
Deu pra esclarecer beleza!  ;]
 
Grato.
 
Abs,
-----------------------------------------------------------------------
Lucas Mendonça
luca...@gmail.com
www.lucasmendonca.com   <--- Atualizado
Reply all
Reply to author
Forward
0 new messages