Ciao a tutti! E’ da qualche giorno che ho cominciato a smanettare con Yii e devo dire che, per le cose basilari, a parte qualche intoppo qua e là, mi trovo alla grande.
Dicevo: per le cose basilari. Infatti sto sbattendo la testa su un problema che non riesco a risolvere. Ho le seguenti tabelle:
tbl_progetti tbl_progetti_utenti tbl_utenti
------------ ------------------- ----------
id progetto_id id
titolo utente_id nome
... ...
-Ad ogni progetto possono essere associati più utenti
-Ogni utente può occuparsi di più progetti
Nel model dei progetti ho impostato la relazione:
public function relations()
{
return array(
'progettiUtenti'=>array(self::MANY_MANY, 'Utenti', 'tbl_progetti_utenti(progetto_id, utente_id)'),
);
}
Sempre nel model ho dichiarato una property per tenere traccia degli utenti associati al progetto e ho aggiunto una regola safe:
public $utentiSelezionati;
...
public function rules()
{
return array(
...
array('utentiSelezionati', 'safe')
);
}
Nell’afterFind del model ho inserito:
$this->utentiSelezionati = (Yii::app()->db->createCommand()->select('utente_id')
->from('tbl_progetti_utenti')
->where('progetto_id=:prid', array(':prid'=>$this->id))
->queryColumn());
che mi restituisce un array contenente gli indici dei checkbox da selezionare in _form:
echo $form->CheckBoxList($model, 'utentiSelezionati', Chtml::listData(Utenti::model()->findAll(),'id','nome'));
La CheckBoxList viene generata correttamente, così come vengono selezionati i check box in maniera corretta. Però adesso non riesco a stabilire come passare al model (in afterSave) i valori modificati dei checkbox. Ho provato, seguendo questo thread:
protected function afterSave()
{
if (!is_null($this->utentiSelezionati)) {
Yii::app()->db->createCommand()->delete('tbl_progetti_utenti', 'progetto_id = :id', array(':id' => $this->id));
if ($this->utentiSelezionati) {
foreach ($this->utentiSelezionati as $utenteId) {
Yii::app()->db->createCommand()->insert('tbl_progetti_utenti', array('progetto_id' => $this->id, 'utente_id' => $utenteId));
}
}
}
}
Ma in questo modo tbl_progetti_utenti non viene modificata.
Una mano sarebbe graditissima