Tive um problema parecido, Criei uma coluna num_vendas na tabela produtos e a cada venda incrementava o valor desta coluna. Assim conseguia utilizar o framework para a paginação de forma bem simples.
Flw. On 1 fev, 08:37, "Joao Jose Pedrini" <[EMAIL PROTECTED]> wrote: > Opa Thiago, > > Para quem conhece a funcionalidade VIEW de SQL a solução é muito simples. > Para quem não conhece, o conceito também á simples: São tabelas virtuais ou > temporárias que os dados são adquiridos de outras tabelas. As funções > principais de uma VIEW são segurança e otimização. Podemos utilizar para > segurança quando temos um banco de dados para sistemas paralelos e queremos > determinar quais são os campos das tabelas que um determinado usuário pode > acessar. Já otimização é no caso de querermos armazenar o resultado de uma > grande consulta ou uma stored procedure em uma tabela no banco... fazendo > com que o acesso ao resultado seja muito mais simples. Lembrando que o banco > de dados realiza as verificações de INSERÇÃO e ATUALIZAÇÃO de forma > transparente. Realmente é algo muito bom de se usar. > > Bem, não sei se expliquei bem mas é mais ou menos isso que VIEW é, espero > contribuições de outros usuários caso tenha errado ou esquecido de alguma > coisa. > > Voltando na explicação do meu problema, o sistema é uma variação de um > e-commerce, possui navegação por categoria, descrição do produto e listagem > de produtos entre outros. No listagem de produtos há um requisito de > ordenação por quantidade de vendas. As informações sobre o número de Vendas > está armazenado numa tabela separada, uma relação $hasMany de Produto -> > Venda. Na verdade, a tabela vendas armazena as transações realizadas, porem > com um simples COUNT() é possível saber quantas vendas foram realizadas. > Estou utilizando o Paginate do Cake 1.2 e quando fui desenvolver esse > requisito, fiquei na dúvida de como utilizar. > > Em SQL isso é muito fácil: SELECT Produto.id, COUNT(Venda.*) AS num_vendas > FROM Produto LEFT JOIN Venda ON Produto.id = Venda.produto_id GROUP BY > Produto.id ORDER BY num_vendas DESC > > Agora, como fazer isso no Cake que eu simplesmente não descobri. Tentei de > várias maneiras e pesquisei bastante. Só que não consegui uma solução > através do Cake. A solução foi muito mais simples que eu imaginava, > armazenei esta mesma SQL em uma VIEW e criei uma relação $hasOne do produto > com a tabela VIEW. Depois disso fica simples. > > Um comentário: > Nunca trabalhei com uma plataforma de desenvolvimento completa como o Cake, > e geralmente, quando quero resolver um problema, penso na solução mais baixo > nível possível. Quando comecei a utilizar o Cake, venho me policiando para > sempre utilizar as funcionalidades do framework para não querer reinventar a > roda. Só que este policiamento tem seus lados ruins, nem sempre o framework > nos dará todas as soluções prontas, e nem é o objetivo dele, neste caso > fiquei horas, gastando tempo de dois funcionários para procurar uma solução > pronta que aparentemente não existe. E até pode existir, mas como ainda > penso em soluções baixo níveis, não consegui achar. > > Mas fica a dica de que nem sempre temos que utilizar somente o que o > framework nos fornece. E para quem tiver algum sistema com comportamento > parecido, fica ai a solução. > > Abraços > > 2008/1/30 Thiago Paes <[EMAIL PROTECTED]>: > > > > > Parece ter sido uma ótima solução João, você poderia compartilhar com a > > galera com mais detalhes? > > > Abs, > > Thiago > > > -- > > > 2008/1/30 Joao Jose Pedrini <[EMAIL PROTECTED]>: > > > Olá galera, > > > > Hoje passei um aperto danado para resolver um problema de ordenação com > > > o CakePHP 1.2. Eu tenho um campo $hasMany que necessita ter um > > > agrupamento para obter o resultado. O sistema necessita de uma ordenação > > > de > > > acordo com o numero de vendas, no SQL faria normalmente com COUNT() e > > > GROUP > > > BY, mas tive dificuldade. Depois de MUITAS horas, obtive somente uma > > > solução. (as vezes nós não pensamos direito pois ficamos com a ilusão de > > > que > > > framework vai fazer tudo pra nós). > > > > Resolvi através de VIEW em SQL (Mysql 5.0), depois criei uma associação > > > $hasOne no model do Produto, e pronto... solução feita. > > > > Estou contando minha experiência pois não desejo essa perda de tempo > > > para ninguém... acredito que outros sistemas possam utilizar essa solução, > > > como sistemas de Votos, Rankings, etc. > > > > Aquele abraço! > > > > -- > > > Joao Jose Pedrini > > > [EMAIL PROTECTED] > > > Consultor - COP-JR > > >http://blog.copjr.info/ > > > -- > > ________________________________________________________ > > Thiago Paes -www.thiagopaes.com.br- Linuxer: #224062 > > -- > Joao Jose Pedrini > [EMAIL PROTECTED] > Consultor - COP-JRhttp://blog.copjr.info/ --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito no Grupo "Cake PHP Português" em Grupos do Google. Para postar neste grupo, envie um e-mail para [email protected] Para cancelar a sua inscrição neste grupo, envie um e-mail para [EMAIL PROTECTED] Para ver mais opções, visite este grupo em http://groups.google.com/group/cake-php-pt?hl=pt-BR -~----------~----~----~----~------~----~------~--~---
