Minha primeira opinião sobre o recurso não foi positiva, achei desnecessário, mais fácil fazer um método qualquer do que criar um tipo de busca.
Até que um pouco mais tarde encontrei utilidade com o PaginateComponent. Esse monta a busca dinamicamente e nesse processo passa os parâmetros recebidos para ORM do cake, nesse caso não havia outra forma de customizar a busca se não fosse com custom find types.
Nota: Usar os hooks mais genéricos, afterFind e beforeFind, não eram uma boa saída para o meu caso, mas o funcionaria com o PaginateComponent.
Sem mais delongas a receita:
Model
Adicionar atributo
public $findMethods = array('nameCustomType' => true);
Criar método
protected function _findNameCustomType($state, $query, $results = array()) {
if ($state === 'before') {
$query['conditions']['Article.published'] = true;
return $query;
}
return $results;
}
O cake chama esse método duas vezes, alternando a variável
state. Quando ele passa no
state before temos que retornar a
query, caso contrario retornar
results.
No
model isso é o bastante.
Já no paginate a manha está em usar um índice no mesmo nível que
fields ou
conditions no array de configurações especificando o tipo de busca. Ex.:
$this->paginate = array(
'ModelName' => array(
'findType' => 'nameCustomType'
)
);
$this->paginate('ModelName',$filter);
Com isso o paginate vai executar o hook criado.
Eu achei a interação muito boa, em total harmonia com o PaginateComponent, vale a pena usar.
Cheers!