[SOLUCIONADO] Insertar muchos registros con un solo submit

Hola amigos de Yii,

necesito crear un formulario donde un usario inserta una cantidad y Yii me tiene que crear los registros en la tabla de base datos cuantos son los que el usuario inserte en el campo "cantidad".

Les ago un exemplo:

Cantidad: 10

Destino: Roma

Peso de cada envio: 20

Cuando el usuario pinche en el sumbitbutton Yii debe crear en la tabla de base datos 10 registros :

1 Roma 20

2 Roma 20

3 Roma 20

y sigue asi hasta que no llegue al total declarado en el campo cantidad.

Cantidad tiene que ser una propriedad y no tiene que ser insertado en la base datos.

Eso ya se como se hace en el model declaro mi propriedad y ya esta.

Lo que no entiendo es como hacer el action en el controlador.

Como pasarle al controlador cantidad y hacer un for o foreach para que me inserte los registros. Solo llego a insertar un registro a la vez.

Alguien puede ayudarme por favor?

Les pido disculpa por mi espanol :(

Depende de como recojas los valores en el controlador, pero no deberías tener problemas en leer el valor. Puedes echar un ojo a los valores que se están enviando si abres tu página web con chrome, pulsas F12, vas a la pestaña “Network”, pulsas “preserve log” y luego envías el formulario; la petición POST debería estar visible y puedes ver el nombre de los parámetros; en Yii puedes leerlos con Yii::app()->request->getPost(‘nombre’).

la mas facil seria q en tu controlador en el action create luego de recibir los datos hagas un for …




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

{

//luego de que recibes los datos ...

$cantidad=$model->cantidad;

$ciudad=$model->ciudad;

$peso=$model->peso;


for ($i = 1; $i <= $cantidad; $i++) {

    $modelx=new Tumodelo;

    $modelx->ciudad=$ciudad;

    $modelx->peso=$peso;

    $modelx->save();

}


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

}



creo q con eso bastaria para crear los registros dependiendo de lo que ingrese como cantidad

Hola y gracias por las respuestas.

erickMartinez he probado esto.

En el modelo declaro mi propriedad (que no tiene que ser guardada en la base datos):




class Missiva extends CActiveRecord

{

................

	public $cantidad;

................



En el controlador he creado mi acciòn:




	public function actionMS_step1()

	{

	    $model=new Missiva;

	    $this->layout="//layouts/benvenuto";  

		

		//Se clicca su Annulla Missiva

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

		{

  $this->redirect(array('Nuovapostalizzazione'));

		}

		//se invece clicca su Avanti

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

		{

	  $cantidad=$model->cantidad;

           $ciudad=$model->ciudad;

           $peso=$model->peso;

			

	for ($i = 1; $i <= $cantidad; $i++) {

            $model->ciudad=$ciudad;

            $model->peso=$peso;

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

            $model->save();

			

			}

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

		

		}

		

	if(Yii::app()->user->checkAccess('Cassa')!=Yii::app()->user->id){

	$this->redirect(array('cassa/nessunacassa'));

        }else{	

	$this->render('frontend/ms-step1', array('model'=>$model));

					  }

	

	}



En la vista tengo mi formulario:




<div class="table_box">


<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(

	'id'=>'missiva-form',

	'enableAjaxValidation'=>true,

	'clientOptions'=>array(

	 'validate OnSubmit'=>true,

))); ?>


	<?php echo $form->errorSummary($model); ?>

        <div class="table_box">

        <table class="tabella_login" style="width: 100%; margin: auto;">

  <tbody>

    <tr>

	  <td colspan=2 class="tabella_info_header tabella_first_form">Nuova Massiva</td>

	</tr>

       

        <tr>

        <td class="tabella_info_campo_data" width="15%">

        ciudad

        </td>

        <td class="table_info_data" style="padding-top:20px;">

		<?php echo $form->dropDownList($model,'ciudad', CHtml::listData(Cap::model()->findAll(), 'codigopostal_id', 'ciudad'),array('class'=>'span5')); ?>

        </td>

        </tr>

        

        

        

        <tr>

        <td class="tabella_info_campo_data">

		Cantidad

        </td>

        <td class="table_info_data" style="padding-top:20px;">

		<?php echo $form->textField($model,'cantidad', array('class'=>'span4'));?>

        </td>

        </tr>

        

        <tr>

        <td class="tabella_info_campo_data">

		Peso

        </td>

        <td class="table_info_data" style="padding-top:20px;">

		<?php echo $form->textField($model,'peso', array('class'=>'span4'));?>

        </td>

        </tr>

        

        

	   <tr class="tabella_info_footer">

	     <td colspan=2 class="tabella_chiusura_form">

       <?php echo CHtml::submitButton('Avanti' ,array('class'=>'btn btn-primary btn-small')); ?>

	   <?php echo CHtml::submitButton('Annulla Missiva', array('name'=>'annulla', 'class'=>'btn btn-danger btn-small')); ?>

       

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

        </td>

        </tr>

        </tbody>

        </table>

       </div>


</div><!-- form -->



Si el usuario pincha el boton "Avanti" (adelante), no crea ningun registro.

Donde estoy fallando? Lo siento mucho pero tampoco entiendo donde me voy equivocando.

Soluciones?? Uffff :(

Yo creo que podrías utilizar este codigo de la guía, para envío multiple de valores :)

http://www.yiiframework.com/doc/guide/1.1/en/form.table

Hola estebanhere30, el codigo que dices ya lo habia visto pero es por hacer un update si no me equivoco.

He probado ese codigo muchas veces pero no funciona.

Por eso he probado con el codigo de erickMartinez pero tampoco me sale bien.

Voy buscando hotras soluciones, o alguien que pueda corregir mi codigo.

Gracias lo mismo por tu respuesta :) .

debes cambiar este


<?php echo CHtml::submitButton('Avanti' ,array('class'=>'btn btn-primary btn-small')); ?>

por un boton que valla al controlador y ejecute la funcion que hiciste…


<?php echo CHtml::button('Button Text', array('submit' => array('controller/action'))); ?>

algo asi como :




echo CHtml::button('Avanti',

    array(

        'submit'=>array('Nombredetucontrolador/nombredelaction'), 

       // 'class'=>'btn btn-primary btn-small',

        //'confirm' => 'Are you sure?'

      

    )

);



Hola Erick, pido desculpa a ti y a los otros que ententaron ayudarme!!! Me habia olvidado de declarar mi propriedad "cantidad" en el modelo !!! Solo habia puesto




..............

$public cantidad;

.........



Pero tampoco habia declarado mi propriedad y mi regla de validacion en el scenario!!!




array('cantidad', 'numerical', 'min'=>1, 'tooSmall'=>'Introduzca una cantidad ', 'on'=>'MS' ),

			

			array('cantidad', 'required', 'message'=>'Cantidad minima: 1',  'on'=>'MS' ),



Ahora tu codigo funciona mui bien :) muchas gracias.

Muchas gracias a todos por su ayuda y les pido disculpa si he olvidado de declarar esa tonteria en el modelo…pero es que me estaba comiendo el "coco" con este problema.