Consulta Ao Banco De Dados

Pessoal tenho uma página de cadastro de livro,mas para cadastrar livro

preciso buscar o autor, já tenho minha tabela autor, como posso

fazer um campo de busca no cadastro de livro que busca todos os autores

da minha tabela autor?

Alguem sabe como?

Desde já Obrigada. :)

Você pode usar um campo select mesmo, tipo:


<?php

$autor= CHtml::listData(Autor::model()->findAll(), 'id_autor', 'nome_autor');

$options = array(

'tabindex' => '0',

'empty' => '-- Selecione --',

);?>

O problema é se possuírem vários autores

quero fazer um campo de busca que você digita

o nome do autor ou parte do nome dele,e o autor aparece em uma tabela

Olá bia, tudo bem?

Então não sei se é exatamente o que você quer, mas você pode ter uma busca com autocomplete, assim:




<?php 

$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

						'id'=>'autor',

						'name'=>'autor',

						'source'=>$this->createUrl('ator/pesquisaator'),

						'htmlOptions'=>array(

						),

					)); 

?>



No caso source será o controller/action usado para buscar o termo digitado.

Dai no seu controlador, você recupera o valor digitado e utiliza algum método para fazer a busca.




public function actionPesquisaator()

	{

		if(isset($_GET['term'])&&($keyword=trim($_GET['term']))!=='')

		{

			$suggest=Ator::model()->pesquisaAtor($keyword);

			echo CJSON::encode($suggest);

		}

	}



era isso que você precisava?

Ficaria assim ?




<?php 

$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

'id'=>'idAutores',

'name'=>'nome',

'source'=>$this->createUrl('AutoresController/pesquisaAtor'),

'htmlOptions'=>array(

),

)); 

?>




</div>







public function actionPesquisaAtor()

{

if(isset($_GET['term'])&&($keyword=trim($_GET['term']))!=='')

{

$suggest=Autores::model()->pesquisaAtor($keyword);

echo CJSON::encode($suggest);

}

}




lembrando que quero buscar o autor no form do view material

sendo que autor é outro view

isso mesmo, não há problemas …

o que você poderia fazer pra ficar mais legal é o seguinte:

1 - faça esse autocomplete dessa forma, só armazenando o nome …

2 - quando o nome for selecionado ele pode preencher uma input do tipo "hidden" com o id do autor, dessa forma você só recupera esse campo …

Quando comecei com Yii encontrei uns exemplos legais de widgets no site abaixo, inclusive tem esse de autocomplete, ve se te ajuda:

http://www.eha.ee/labs/yiiplay/index.php/en/site/widget?view=autocomplete

isso que falei seria parecido com o terceiro exemplo do site …

fiz exatamente como postei anteriormente e não deu certo

Bia, fiz alguns ajustes aqui e está funcionando tente ai …

View:




<?php 

		$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

			'id'=>'idAutores',

			'name'=>'nome',

			'source'=>$this->createUrl('autores/pesquisaAutores'),

			'htmlOptions'=>array(),

		)); 

?>



AutoresController - adicionar a seguinte action:




public function actionPesquisaAutores(){

	

	if(isset($_GET['term'])&&($keyword=trim($_GET['term']))!==''){

		$pesquisa = Tag::model()->getAutores($keyword);

		echo CJSON::encode($pesquisa);

	}

}



Autores(Model) - adicionar o seguinte método:




public function getAutores($keyword){

		

	$retorno = array();

		

	$autores = array(

		'Marcelo'=>'Marcelo',

		'Maria'=>'Maria',

		'Pedro'=>'Pedro',

		'Antonio'=>'Antonio'

	);

		

	foreach($autores as $indice=>$conteudo){

		if(strpos($indice, $keyword) !== false){

				$retorno[] = utf8_encode($conteudo);

		}

	}

		

	return $retorno;

}



A única coisa que você terá que ajustar é o método getAutores para que ele busque o resultado no banco. No meu caso fiz com uma array apenas para lhe mostrar ;)

Obrigada, mas uma dúvida esse View vai ficar no :

C:\wamp\www\biblioteca\protected\views\autores\view ??

Funcionou? rs …

Então, na verdade, aquele trecho pode ser inserido em qualquer view, inclusive na view que contem o formulário responsável pelo seu cadastro de livros …

Ops não funcionou, desculpa minha ignorância sou iniciante em php e no Yii,

esse : ‘id’=>‘idAutores’, se refere ao idAutores da minha tabela autores

    'name'=&gt;'nome', e o name ao nome do autor da tabela??

relaxa, todos já passamos por isso rs … esses atributos definem o name e o id do input, html mesmo, não tem nada a ver com a tabela …

Então, mas você fez isso que falei e que erro aparaeceu? se possivel ativa o debug no arquivo index.php:




defined('YII_DEBUG') or define('YII_DEBUG',true);