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 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • 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.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
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 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • 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
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
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