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!
Nenhum comentário:
Postar um comentário