Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Taffarelo3

[Resolvido] Formulario de Busca

Recommended Posts

Bom dia pessoal! O meu problema é esse, estou tentando fazer um campo simples de busca para procurar por uma palavra no campo Nome da tabela Produtos, já pesquisei na documentação, e nos grupos tanto brasileiro como grupo americano, sinto que estou no caminho certo, mas não esta acontecendo nada, olhem o que eu estou fazendo. o campo busca é um elements que eu posso usar em qualquer pagina, um formulário muito simples

 

//search.ctp element
<?php $form->create('Produto', array('action'=>'search');?>
<?php $form->input('nome');?>
<?php $form->end('Buscar');?>

<?php if(isset($resultados)):?>
<?php foreach($resultados['Produto'] as $resultado):?>
<?php echo $resultado['nome'];?>
<?php endforeach?>
<?php endif?>

//ProdutosController
 function search(){
   $conditions = array('Produto.nome' => $this->data);
   $this->set('resultados', $this->Produto->find('all', $conditions));
}

tem alguma coisa errada, estou cometendo algum erro? Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. está quase lá.

1 -

$this->data vai retornar uma matriz e não o valor do campo "nome". Para retornar o valor do campo nome você deve fazer:

$this->data['Produto']['nome'];
O primeiro indice representa o Model e o segundo o campo.

 

2-

A condição não vai funcionar, pois ela deve estar no índice "conditions" de um array, exemplo:

$this->set('resultados', $this->Produto->find('all', array('conditions' => $conditions)));

 

3-

Com este formulario de busca, você só buscará nomes exatos. Ou seja, se você buscar "pelegrino", ele só casará palavras "pelegrino", e eu acho que você quer que, se ele buscar por "pelegrino", possa retornar "Lucas pelegrino", "Joao Da Silva Pelegrino" e etc...

Para isso você pode utilizar o método postConditions, há outras formas, mas eu prefiro esta :)

exemplo:

 

$conditions = $this->postConditions($this->data , array('nome' => 'LIKE'));
$this->set('resultados', $this->Produto->find('all', array('conditions' => $conditions)));

Isso deve servir :)

OBS: se não conhecer algum metodo, procure na api.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@lucaswxp

cara funcionou perfeitamente!!!

Realmente eu fiz umas besteiras no que eu fiz, mas obrigado por ter me ajudado!

Não conhecia esse método 'postConditions' não sabia que ele faria isso tudo! Obrigado mesmo!!! Se prescisar de algo é só mandar um MP!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.