Guardar Datos Multiples

bnas todos, tengo el siguiente problema que no he entendido como resolverlo.

tngo en mi accion create un guardado a diferentes modelos.




public function actionCreate()

	{

		

		$model=new Buzon();

		$model2=new Anexo();

		$model3=new Destino();


		$UsuInterno=UsuInterno::model()->findByPk(Yii::app()->user->id);

		$dependencia=$UsuInterno->dependencia;

		

		$User=UsuInterno::model()->findByPk(Yii::app()->user->id);

		$usuinterno=$User->usuint_nombre;

		


		$vid = Yii::app()->db->createCommand('SELECT max(id) FROM buzon')->queryScalar();

		

		// Uncomment the following line if AJAX validation is needed

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

		

		$this->performAjaxValidation(array($model,$model2,$model3));

		if(isset($_POST['Buzon'], $_POST['Anexo'],$_POST['Destino']))

		{

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

			$model2->attributes=$_POST['Anexo'];

			$model3->attributes=$_POST['Destino'];

			

			$model->buz_fechacrea = new CDbExpression('NOW()');

			$model->buz_fechaven = strtotime('today + '. $model->plantilla->plant_diasmax . ' days');

		

			$model2->ane_rutaarchivo=CUploadedFile::getInstance($model2,'ane_rutaarchivo');

			$model2->buzon_id=$vid+1;


                        $model3->usuario_interno_id="usuario_interno_id";

			

			$model->usuinterno_id=Yii::app()->user->id;

			

			if($model2->save() && $model->save()){

				

				$model2->ane_rutaarchivo->saveAs(Yii::getPathOfAlias('webroot').'/protected/images/'.$model2->ane_rutaarchivo);

				

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

		

			}

		}

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

			'model'=>$model,

			'model2'=>$model2,

			'model3'=>$model3,

			'dependencia'=>$dependencia,

			'usuinterno'=>$usuinterno,

		));

	}



esta es la relacion.


public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(


		'anexos'=>array(self::HAS_MANY,'Anexo','buzon_id'),

		'destinos'=>array(self::MANY_MANY,'Destino','destino(buzon_id, usuario_interno_id)','together'=>true),


		);

	}

la primera relacion me funciona muy bn!! la de model2 pero a la hora de hacer lo mismo con otra relacion model3, de MANY_MANY, donde es la tabla buzon, una nueva tabla destino y una usuario_interno donde la tabla destino es el resultado de la relacion entre buzon y usuario_interno.

buzon: id, buz_tipo, etc

destino: buzon_id, usuario_interno_id.

usuario_interno: id, nombre, etc

en el form tengo lo siguiente:





<div class="form">

<p  align="center" ><?php echo CHtml::image(Yii::app()->theme->baseUrl."/images/footer.png");

?><br><?php 

echo date("d-m-Y");

?><br><?php  

echo CHtml::encode($dependencia->dep_nombre) ;


?></center></p>


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'buzon-form',

	'enableAjaxValidation'=>false,

	'htmlOptions' => array('enctype'=>'multipart/form-data'),

)); ?>


<p class="note">Columnas con <span class="required">*</span> son requeridas.</p>


<?php echo $form->errorSummary(array($model,$model2,$model3)); ?>


/.../


<div class="row">

		<?php echo $form->labelEx($model3,'usuario_interno_id'); ?>

		<?php echo $form->checkBoxList($model3,'usuario_interno_id',CHtml::listData(UsuInterno::model()->findAll(),'id','usuint_nombre'),array('empty'=>'Seleccione un nombre')); ?>

		<?php echo $form->error($model3,'usuario_interno_id'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'alerta'); ?>

		<?php echo $form->textField($model,'buz_alerta'); ?>

		<?php echo $form->error($model,'buz_alerta'); ?>

	</div>

	

	<div class="row">

		<?php echo $form->labelEx($model2,'Anexo'); ?>

		<?php echo $form->fileField($model2,'ane_rutaarchivo'); ?>

		<?php echo $form->error($model2,'ane_rutaarchivo'); ?>

	</div>


	<div class="row buttons">

		<?php echo CHtml::submitButton($model->isNewRecord ? 'Crear' : 'Guardar'); ?>

	</div>


<?php $this->endWidget(); ?>

<p  align="center" ><?php echo CHtml::image(Yii::app()->theme->baseUrl."/images/header.png");?></center></p>

</div>



mi pregunta es como hago para guardar el $model3, sabiendo que tiene multiples registros. Estuve buscando pero la vdd nunca explican muy bn como hacerlo que con un while o un for pero no se como hacerlo en el controller, no entiendo.

y en el save se haria igual? siemplemente poner: if($model3->save() && $model2->save() && $model->save()){

lo intente implementando esto pero no me da.

$model3->usuario_interno_id=implode(’,’,$model3->usuario_interno_id);

la idea es que en la tabla destino queden guardados los usuarios a los q se envia el buzon por ejemplo a los usuarios con id 1,2,3 les pertenece el buzon 1

destino

buzon_id usuario_interno_id

 1------------&#62;1


 1------------&#62;2


 1------------&#62;3

se supone que debe quedar guardado asi!

Agradecería mucho la ayuda :D

modelo E/R:

[/php]

Hola dreslop,

Está a medio paso de hacerlo :)

Un par de extensiones que facilitan este trabajo son:

Mi favorito es el segundo (me permite más control), pero creo que para su caso podría adaptarse un poco más el primero (porque requiere solo un comando save()).

Saludos.

gracias robregonm por tu ayuda me has sacado de unas grandes :D, estoy usando la primera como me lo recomendaste pero me surge una pregunta esta seccion de codigo va en el modelo o en el controller?




<?php

$post=new Post;

$post->title='Relational saving is not a dream anymore.';

$post->content='Since WithRelatedBehavior released...';


$tag1=new Tag;

$tag1->name='relation';

$tag2=new Tag;

$tag2->name='save';


$post->tags=array($tag1,$tag2);


$post->withRelated->save(true,array('tags'));



es que no entiendo muy bn si me toca modificar todo el create del controller o q!?

Eso depende de lo rígido que sea a la hora de implementar los estándares de desarrollo :)

Respuesta corta: Debería ir en el controller.

Respuesta corta de la respuesta larga: En ambos XD