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