leitura de
Encontrou um problema no conteúdo? Por favor, deixe seu comentário!

Recentemente comecei a trabalhar num projeto onde a maior parte dos models tem um campo “published”, que servirá para controlar qual conteúdo entra ou não no site externo… E eu não acho muito prático ficar colocando "published" => true em todas as conditions do site.

Foi aqui que tive a idéia de criar o $Model->find('published'), que funciona da mesma forma que o $Model->find('all') mas inclui a condição internamente.

A documentação é bem simples, e o resultado da minha implementação (que estou usando no meu projeto) é mais ou menos assim:

A lógica é bem simples.. precisamos:

  1. Definir um método chamado "_findPublished" que será rodado antes e depois da consulta
  2. Retornamos os resultados encontrados caso ele tenha sido executado após a consulta ($state == after)
  3. Verificamos se o model tem uma coluna "published" e, caso tenha, incluímos a condição na $query

Agora eu posso buscar apenas os posts publicados de uma forma bem mais padronizada e elegante: $this->Post->find('published');

O método escapeField(field) (doc) recebe um nome de coluna e retorna no formato Model.coluna, no meu exemplo ficaria algo como Post.published.

Com isso você pode criar vários tipos de find, como por exemplo: $Model->find('active'), $Model->find('inactive') ou até $Model->find('urgent'), manipulando as condições extras internamente e deixando a sua aplicação muito mais organizada.

Não se esqueça que você pode criar um tipo de find pra todos os models (no AppModel) ou pra apenas um model, dentro dele.

E aí, gostou? :)

Thiago Belem / Blog

Thiago Belem


Publicado

Thiago Belem / Blog

Thiago Belem / Blog

Artigos e tutoriais sobre desenvolvimento WEB

Continue lendo