CakePHP Brasil

22 abril 2010

Behavior para melhorar o find

Arquivado em: CakePHP — Tags:, — Juan Basso @ 7:14 pm

Hola!

Estava aqui implementando alguns projetos e vi o quão chato é ter que implementar os models no cake sempre pensando nas queries que ele irá gerar.

As vezes vou fazer um find em models que tenham hasMany e quero fazer um filtro pelo model do hasMany e não consigo. Se eu coloco no conditions ele diz que a tabela do hasMany não existe. Se eu uso Containable ele mostra todos os registros do model que fiz o find com alguns tendo associações vazias. Ou seja, ele não faz JOIN com as tabelas hasMany nesses casos, sempre gerar queries diferentes e não sabe tratar direito.

Pensei em implementar isto no core do cake e propor para eles, mas a release 1.3 está fechada para enhancements, então ficaria para a versão 1.4/2.0 que sabe-se lá quando vem… Pensei então em um plugin para implementar isto, mas aí entra meu maior problema em computação: qual o nome?! :P

Alguém tem alguma sugestão? Como será um projeto a nível internacional, pensei em “SuperFind”, “FindPlusPlus”, “xFind”… Alguém tem alguma melhor?

No começo será mais para melhorar os relacionamentos de joins e afins, mas futuramente trabalhar melhor um pouco os casos de limit nos relacionamentos e outras coisitas a mais do find.

12 maio 2008

Controller sem Model

Arquivado em: CakePHP — Tags:, , , — Juan Basso @ 9:08 pm

Estava lendo o blog de Daniel Hofstetter e vi uma coisa muito interessante que deve ser ressaltado e alertado ao pessoal. Quando você usa controladores e não quer utilizar modelos, você pode fazer isto de duas maneiras:

1
2
3
class MeuController extends AppController {
    var $uses = null; 
}

OU

1
2
3
class MeuController extends AppController {
    var $uses = array(); 
}

Eu uso normalmente o “$uses = null;”, mas com este post vou mudar de atitude. O motivo é o seguinte: quando você faz o uso de modelos dentro do AppController, por exemplo, você utiliza a variável $uses também informando o nome do modelo. Entretando, como o seu controlador é uma classe filha do AppController, ele acaba “destroindo” a variável dos modelos e ao utilizar nas funções do AppController ele dizia que a propriedade não estava definida.
Quando você utiliza $uses = array(), o Cake faz um merge, ou seja, junta o vetor vazio do seu controlador com o vetor com informações do AppController.

Portanto, vamos utilizar $uses = array() daqui em diante quando não quisermos utilizar modelos. Assim, evitamos problemas mais sérios.

Powered by WordPress