checkbox multipli

Ciao mi sto facendo una paginetta template CRUD per la gestione di tutti i tipi possibili di campi (numeri, date, text ecc)

Ho appena finito la gestione del checkbox che lavora in questo scenario:

-scelte possibili prese da tabella del db

-valori multipli selezionati memorizzati su tabella molti a molti tra model e tabella delle scelte possibili

Il problema è che cercando nel sito non ho trovato consigli su come gestire al meglio questo oggetto e non so se come sto facendo è il modo giusto o mi sono imbarcato in un metodo troppo complicato.

Vi dico come ho fatto.

Struttura database:

Tabella model : nome=tmpl_template : nessun campo per il check box essendo a selezione multipla

Tabella scelte possibili : nome=tmpl_ext_values : contiene le . Campo 1=id, campo2=value

Tabella molti a molti di collegalmento: nome=tmpl_template_check_box_ext_values : contiene i valori chekkati : Campo1=id, campo2=id_tmpl_template, campo 3=id_tmpl_ext_values

Nella classe del model:

proprietà pubblica :




	public $check_box_ext_values_id_tmpl_ext_values;



relations:




	'tmplTemplateCheckBoxConstValues' => array(self::HAS_MANY, 'TmplTemplateCheckBoxConstValues', 'id_tmpl_template'),



afterFind (devo usare bene le relazioni di activerecord ma per ora questo funziona!) :





		//Recupera check_box_ext_values_id_tmpl_ext_values

		$_TmplExtValues_values = TmplExtValues::model()->findAll(array(

			//Filtri su tabella post

			'select' => 't.id', //only  select  the  'title'  column

			'join' => 'INNER JOIN tmpl_template_check_box_ext_values ON tmpl_template_check_box_ext_values.id_tmpl_ext_values=t.id AND tmpl_template_check_box_ext_values.id_tmpl_template=:id_tmpl_template',

			'params' => array(

				':id_tmpl_template'=>$this->id,

			),

			'order' => 't.id',

			'together' => true,

		));

		foreach($_TmplExtValues_values as $_TmplExtValues_values_item){

			$this->check_box_ext_values_id_tmpl_ext_values[] = $_TmplExtValues_values_item->id;

		}<br class="Apple-interchange-newline">



afterSave:





		TmplTemplateCheckBoxExtValues::model()->deleteAll('id_tmpl_template=:id_tmpl_template',array(':id_tmpl_template'=>$this->id));

		if($this->check_box_ext_values_id_tmpl_ext_values) foreach($this->check_box_ext_values_id_tmpl_ext_values as $check_box_ext_values_id_tmpl_ext_values_item){

			$_TmplTemplateCheckBoxExtValues = new TmplTemplateCheckBoxExtValues();

			$_TmplTemplateCheckBoxExtValues->id_tmpl_template = $this->id;

			$_TmplTemplateCheckBoxExtValues->id_tmpl_ext_values = $check_box_ext_values_id_tmpl_ext_values_item;

			$_TmplTemplateCheckBoxExtValues->save();

		}<br class="Apple-interchange-newline">



beforeDelete:




		if (parent::beforeDelete()) {

			TmplTemplateCheckBoxExtValues::model()->deleteAll('id_tmpl_template=:id_tmpl_template',array(':id_tmpl_template'=>$this->id));

			return true;

		}else{

			return false;

		}



Nel controller: actionUpdate:




		if (isset($_POST['TmplTemplate'])) {

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

			$model->check_box_ext_values_id_tmpl_ext_values = $_POST['TmplTemplate']['check_box_ext_values_id_tmpl_ext_values'];

			.....



Nella view:




		<?php 

			$_TmplExtValues_list = TmplExtValues::model()->findAll();

			$_TmplExtValues_listData = CHTML::listData($_TmplExtValues_list, "id", "value");

			$_TmplExtValues_listData_enc = CHTML::encodeArray($_TmplExtValues_listData);

			echo $form->checkBoxList($model, 'check_box_ext_values_id_tmpl_ext_values',  $_TmplExtValues_listData_enc);

		?>



Dovrei aver messo tutto!

Qualcuno ha già affrontato il problema?

ciao

ciao ma sono l’unico che gioca con queste cose?

No in effetti no: non sei l’unico. =)