Creare form per gestire più model dello stesso tipo

Salve a tutti, nei vari esempi e tutorial che ho visto mi è sembrato molto semplice fare un form per un solo model, ma se volessi gestirne di più dello stesso tipo? .

Mi spiego meglio, mettiamo che io ho una tabella Colore(id,stringaColore) : Normalmente creerei un model e un Form model insieme ad un controller, nel form model quindi potrei inserire un singolo colore alla volta e farlo salvare dal controller nel database.

Se invece volessi fare una view con un form che però mi permette di inserire più colori, come posso fare? Io vorrei gestire in sostanza un array di model anzichè uno solo.

Vi ringrazio in anticipo

Intendi inserire più records in una volta sola nello stesso model (e stessa tabella quindi) o in più models (e tabelle diverse)?

Se la risposta è la prima: Tabular Input

Se è la seconda: How to use a single form to collect data for two or more models

banned,

Ho scritto questa guida tempo fa… dovrei anche aggiornarla a dire il vero… fammi sapere se ti è utile.

http://www.yiiframework.com/wiki/291/update-two-model-with-one-view/

Grazie a entrambi, vi aggiorno appena testo le soluzioni.

Fantastici per la rapidità, mille grazie :)

Sensorio il tuo esempi è utile, rifacendomi al caso della tua guida, se vuoi dare la possibilità di inserire dallo stesso form più indirizzi email, quindi più record del tipo Emails, come faresti?

Nel form metterei un array di campi di nome email[]. In questo modo, una volta inviato il form, farei un foreach che salvi ogni indirizzo valido nel suo model.

Capito. Io devo risolvere il problema con delle radioButton però e quindi ho provato a fare come dici tu così


<div id="inlineRadioButton" class="inlineRadioButton" >

							<?php echo $form->radioButtonList($model,'risultatoEvento[$i]',

							array('1'=>'1','x'=>'x','2'=>'2'),array('separator'=>' - ','name'=>'risultatoEvento[]')); ?>

					</div>

Questo naturalmente sta all’interno di un foreach, però facendo così mi vede tutti i radioButtonList come unico e riesco a selezionare soltanto un radio in totale.

Mostrami il foreach.

PS. Mi viene da pensare che il tuo è solo un problema grafico: vuoi fare con i radio quello che fanno i checkbox. I radio, hanno solo un valore per gruppo. I checkbox no. Non potresti urare delle checkbox?

Il foreach di risposta nel controller ancora lo devo realizzare perchè ho il problema nella view.

Ti allego una screen di quello che vorrei fare.

Vedi, per ogni riga riesco a selezionare un checkbox, questo è quello che vorrei ottenere, quindi un array con i checkbox selezionati dovrebbe poi andare al controller.

Tuttavia con il codice che ti ho allegato prima mi permette di selezionare un checkbox per tutta la tabella

Ho capito che cosa ti serve a te. Forse ti sarebbe più utile un submit "secco" al click sul radiobutton.

Comunque si può fare in tanti modi. Ora mi è più chiaro. In questi casi adotto soluzioni "particolari". Vedi: tu hai 11 righe. Io chiamerei ogni riga di radio partite[risultato_N] così avrai partite[risultato_1], partite[risultato_2], … e così via. In questo modo ogni fila di 3 radio avrà un nome univoco. Ma nel submit dovrai anche sapere a quale specifica partita fa riferimento quel radio. Allora farei questo: partite[risultato_PARTITA_RISULTATO]

Avrai delle variabili _POST del tipo partite[risultato_452234_x], partite[risultato_452235_1], partite[risultato_452236_2], partite[risultato_452237_2], …

Nella pagina che riceve la _POST farai questo:

foreach($_POST[‘partite’] as $item) {

&#036;estrai = explode(&quot;_&quot;, &#036;item);


&#036;partita = &#036;estrai[1];


&#036;risultato1x2 = &#036;estrai[2];


&#036;risultato = new Risultato();


&#036;risultato-&gt;partita = &#036;partita;


&#036;risultato-&gt;risultato = &#036;risultato1x2;


&#036;risultato-&gt;save();

}

Spero di averci preso. Io adoro fare cose come questa :-p. Ma sarebbe molto più semplice una post ajax al click del radio.

PS. Quelli tondi sono radio e tu ora li hai chiamati checkbox.