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.
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…