Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Como seria implementado um select para busca em um banco de dados por parte de um nome:
Exemplo:
Busca por nio--> retornaria nome como Antônio
Busca por A* --> retornaria todos nomes que começam com A
>
Como seria implementado um select para busca em um banco de dados por parte de um nome:
Exemplo:
Busca por nio--> retornaria nome como Antônio
Busca por A* --> retornaria todos nomes que começam com A
Moleza mano,
Vamos partir do presuposto de que você vai buscar um cliente
que tenha o nome Antônio:
$nome = 'nio';
$objCliente = new Clientes();
$select = $objCliente->select()
->where("nome LIKE '%".$nome."%'")
->query();
while($Cliente = $select->fetchObject()){
echo $Cliente->nome.'<br />';
}
Veja que no condicional WHERE usei o comando 'LIKE' no meio do SQL.
No meio das aspas coloquei duas vezes o simbolo da porcentagem (%).
Onde o código irá trazer todo e qualquer cliente que tenha no meio
do nome as letras 'nio';
Agora todos que começem com a letra 'A' ficará com o símbolo
apenas do lado direito assim:
$nome = 'A';
$objCliente = new Clientes();
$select = $objCliente->select()
->where("nome LIKE '".$nome."%'")
->query();
while($Cliente = $select->fetchObject()){
echo $Cliente->nome.'<br />';
}
echo $Cliente->nome;
Espero ter ajudado.
Flws.
Vou colocar alguns códigos para que possam me ajudar:
ContatoController.php
public function buscaAction()
{
$request = $this->getRequest();
$form = new Application_Form_Busca();
if ($this->getRequest()->isPost()) {
if ($form->isValid($request->getPost())) {
$valor = $this->_request->getPost('nome');
$mapper = new Application_Model_ContatoMapper();
$this->view->entries = $mapper->search('nome', $valor);
}
}else{
$this->view->form = $form;
}
}
ContatoMapper.php
public function search($chave, $valor)
{
$table = $this->getDbTable();
$resultSet = $table->select()
->from('contato')
->where($chave." LIKE '".$valor."%'")
->query();
if (count($resultSet)) {
$entries = array();
foreach ($resultSet as $row) {
$entry = new Application_Model_Contato();
$entry->setId($row->id)
->setNome($row->nome)
->setEmail($row->email)
->setCidadeEstado($row->cidadeEstado)
->setSite($row->site)
->setTelefone($row->telefone)
->setAtuacao($row->atuacao)
->setComentario($row->comentario)
->setResposta($row->resposta);
$entries[] = $entry;
}
return $entries;
}
}
busca.phtml
<?php if($this->entries){ ?>
<h3>Lista de contatos Via:</h3>
<dl>
<?php foreach ($this->entries as $entry): ?>
<dt><?php echo $entry->id ?></dt>
<dt><?php echo $this->escape($entry->nome) ?></dt>
<dd><?php echo $this->escape($entry->email) ?></dd>
<dd><?php echo $this->escape($entry->cidadeEstado) ?></dd>
<dd><?php echo $this->escape($entry->site) ?></dd>
<dd><?php echo $this->escape($entry->telefone) ?></dd>
<dd><?php echo $this->escape($entry->atuacao) ?></dd>
<dd><?php echo $this->escape($entry->comentario) ?></dd>
<a href="<?php echo $this->url(
array(
'controller' => 'contato',
'action' => 'delete',
'id' => $entry->id,
),
'default',
true) ?>">Excluir contato</a>
<?php endforeach ?>
</dl>
<?php }else{
echo $this->form;
}
Está dando erro e não carrega nenhum cadastro, mesmo existindo um cadastro,está imprimindo assim:
Lista de contatos Via:
----->aqui deveria imprimir o cadastro
Notice: Trying to get property of non-object in D:\server\teste\application\models\ContatoMapper.php on line 86 ----------> aqui o erro
A linha do erro é: $entry->setId($row->id)
Tá dando o erro porque você não fez nenhum fetch, ou seja, você está tentando iterar o select. Seria algo assim:
foreach ($table->fetchAll($resultSet) as $row) {
Acho que resolve.
Carlos Eduardo
>
Tá dando o erro porque você não fez nenhum fetch, ou seja, você está tentando iterar o select. Seria algo assim:
foreach ($table->fetchAll($resultSet) as $row) {
Acho que resolve.
Carlos Eduardo
Se colocar a consulta como você descreve, dá erro de sql, se eu retirar o '->query();' de ContatoMapper.php não dá erro mas não retorna nada, veja como está a minha consulta que busca todos os registros, está funcionando normalmente:
public function fetchAll()
{
$resultSet = $this->getDbTable()->fetchAll();
$entries = array();
foreach ($resultSet as $row) {
$entry = new Application_Model_Contato();
$entry->setId($row->id)
->setNome($row->nome)
->setEmail($row->email)
->setCidadeEstado($row->cidadeEstado)
->setSite($row->site)
->setTelefone($row->telefone)
->setAtuacao($row->atuacao)
->setComentario($row->comentario)
->setResposta($row->resposta);
$entries[] = $entry;
}
return $entries;
}
Esse problema é com o zend mesmo ou só de sql?