[Resolvido] Relacionamento Muitos Pra Muitos

Estou precisado de uma ajuda para gravar dados em uma tabela com relacionamento muitos para muitos.

Vou tentar explicar como faço:

Tenho a TABELA_A,TABELA_REL a TABELA_B

TABALA_A TABELA_REL TABELA_B

ID ID_A ID

NOME ID_B ITEM_1

ENDERECO ITEM_2

Fiz da seguinte forma:

Quando o formulario é carregado ele cria os campos somente para gravar a TABELA_A. Após salvar os dados, actionCreate TABELA_A, faço um render do arquivo update e ai sim será mostrado os itens TABELA_B. Gravo os itens com um actionAdditem em uma janela modal. O preblema é como gravar na TABELA_REL o ID_B??

A TABELA_REL é uma tabela de ligação da TABELA_A com a TABELA_B?

Por que não salva os dados da TABELA_REL no mesmo momento em que for salvar os dados da TABELA_B? armazena ID_A no form da TABELA_B e utiliza no momento de salvar os dados da TABELA_B e salva os TABELA_REL.

O que não estou conseguindo entender é como conseguir o ID_B para salvar na TABELA_REL.

Só se depois de salvar a TABELA_B eu fizer uma pesquisa pelo ID na TABELA_B. Mas será que a integridade destes dados ficaria boa?

Vou usar uns exemplos de código para ficar mais claro…não sei se é a melhor saída mas é a que uso aqui…

Se na controller que salva os dados da TABELA_B

tiver algo assim

Exemplo de um código salvando TABELA_B apenas…




public function actionCreate()

	{

		$model=new Tabela_B;


		// Uncomment the following line if AJAX validation is needed

		 $this->performAjaxValidation($model);


		if(isset($_POST['Tabela_B']))

		{

                    

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

			if($model->save())

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

		}


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

			'model'=>$model,

		));

	}



Fazendo o vínculo…




public function actionCreate()

	{

		$model=new Tabela_B;


		// Uncomment the following line if AJAX validation is needed

		 $this->performAjaxValidation($model);


		if(isset($_POST['Tabela_B']))

		{

                    

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

			if($model->save())

                         {

                            $modelRel=new Tabela_REL;

                            $modelRel->id_A=$_POST['Tabela_A']['id'];

                            $modelRel->id_B=$model->id;

                               if($modelRel->save())

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

                         }

		}


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

			'model'=>$model,

		));

	}



Não sei se deu para entender…mas se salvou ok os dados do B antes de finalizar tudo, cria um novo objeto da Tabela_REL e salva os dados…

No exemplo usei o AR do yii,mas a ideia é a mesma…recomendo também um commit e rollback e um try e catch para ficar mais confiável…

ok obrigado