como criar model e crud de tabela relacionada?

e ae galera, blz? sou iniciante do yii framework, to com uma amigo aprendendo a usar, crie uma aplicação simples com duas tabelas relacionadas.

A estrutura das tabelas é a seguinte:




CREATE TABLE tb_agenda (

  id int(11) NOT NULL auto_increment,

  nome varchar(255) NOT NULL,

  PRIMARY KEY  (id)

);


CREATE TABLE tb_telefone (

  id int(11) NOT NULL auto_increment,

  telefone varchar(10) NOT NULL,

  fk_agenda int(11) NOT NULL,

  PRIMARY KEY  (id),

  KEY fk_agenda (fk_agenda)

);


ALTER TABLE tb_telefone

  ADD CONSTRAINT tb_telefone_ibfk_1 FOREIGN KEY (fk_agenda) REFERENCES tb_agenda (id) ON DELETE CASCADE ON UPDATE CASCADE;



agora como eu faço para criar um crud com as duas tabelas onde eu possa preencher as duas tabelas do banco de dados em um unico formulario e realizar uma busca ultilizando as duas tabelas?

Desde ja, obrigado.

Ate mais.

Opa, na hora que cria o model no GII ele tem a opção (build relations), ai vai dar o nome da relação criada.

Cria o CRUD normal, na hora de mexer no form, usa $model->nome_da_relacao->campo_da_outra_tabela

Se eu não me engano tem uma extensão que aprimora o GII pra já fazer isso, e dar mais opções, mas tem que dar uma procurada.

Espero ter ajudado ;)

pois e cara, nao deu certo, na verdade, nao entendir direito o que vc quiz dizer. ja estou usando a extensao gii, ele cria o relacionamento os relacionamentos dos dois model, blz. so que a duvida está sendo como chamar os dois model em uma pagina so, e salvar no banco. entendeu?

valeu pela ajuda, ate mais, aguardo mais repostas.

Lucivaldo,

Posta aqui para nós como ficou sua relação que vou te mostrar como mostrar os resultados.

blz cara, conseguimos chamar o campo do telefone q esta no segundo modelo, na ‘pagina principal’ e ja esta salvando no banco, agora estou querendo lista a relacao

ta aki o codigo, aproveite e ver se pode gerar algum erro:

relations da agenda




return array(

			'tb_telefones' => array(self::HAS_MANY, 'TbTelefone', 'fk_nome'),

		);



relations do telefone




return array(

			'fk_nome0' => array(self::BELONGS_TO, 'TbAgenda', 'fk_nome'),

		);



agenda/agendacontroller.php




public function actionCreate()

	{

		$model=new agenda;

		$telefone=new telefone;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['agenda']) && isset($_POST['telefone']))

		{

			$model->attributes=$_POST['agenda'];

			$telefone->attributes=$_POST['telefone'];

			if($model->save()){

				$telefone->fk_nome = $model->id;

				$telefone->telefone;

				$telefone->save(false);

				$this->redirect(array('view','id'=>$model->id));

			}

			

			//if($model->save() && $telefone->save(false))

				

		}


		$this->render('create',array(

			'model'=>$model,

			'telefone'=>$telefone,

		));

	}



entao é isso, so falta aparecer o campo da segunda tabela, na primeira, na hora de listar.

valeu aae, ate mais.

Lucivaldo,

Então você conseguiu salvar?

Para listar você pode usar o relacionamento direto na busca dos telefones de cada agenda.

Faz um teste antes da sua CGridView para testar seu relacionamento e ver como funciona.


$agendas = agenda::model()->findAll();


foreach($agendas as $agenda){

	echo $agenda->nome;

	echo '<br>';

	CVarDumper::dump($agenda->tb_telefones->telefone);

	echo '<hr>';

}

Para buscar os dados do relacionamento, e só atribuir ao "$model" ou "$agenda" o nome do seu relacionamento.


$agenda->{relacionamento}->{nome do attributo do relacionamento}

$agenda->tb_telefones->telefone

e ae Newerton, blz? to com uma duvida no seguinte: em como buscar um campo que esta em outra tabela, na funcao de busca, estou querendo trazer o campo do telefone que esta na tabela telefone, para mostrar no index, do model agenda, entendeu? ah, ja esta salvando no db \o/. estou com duvida nessa funcao -"$criteria2->compare(‘telefone’,telefone::model()->$telefone->telefone,true);" – como cria essa funcao – ela fika no model agenda - seach(), tenho trazer o campo da outra funcao nela, como faço isso? valeu cara, ate mais

Se deseja usar o relacionamento no search(), você coloca assim:


$criteria->compare('telefone',$this->tb_telefones->telefone,true);

blz, mas como chamo o valor desse campo la na view do index?

vlw

conseguir mostrar, agora so falta pesquisar ‘esse’ campo - telefone .

ja conseguir pesquisar, agora so falta atualizar esse campo de outra tabela…