Yii Framework Forum: Guardar Datos Multiples - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Guardar Datos Multiples Rate Topic: -----

#1 User is offline   dreslop 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 11
  • Joined: 20-November 12

Posted 26 December 2012 - 04:16 PM

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------------>1
1------------>2
1------------>3

se supone que debe quedar guardado asi!

Agradecería mucho la ayuda :D

modelo E/R:

Posted Image[/php]
0

#2 User is offline   robregonm 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 536
  • Joined: 30-July 09
  • Location:Colombia

Posted 28 December 2012 - 09:23 AM

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

#3 User is offline   dreslop 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 11
  • Joined: 20-November 12

Posted 28 December 2012 - 01:52 PM

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!?
0

#4 User is offline   robregonm 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 536
  • Joined: 30-July 09
  • Location:Colombia

Posted 28 December 2012 - 02:05 PM

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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users