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-JR http://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 -~----------~----~----~----~------~----~------~--~---
