Quantcast
Channel: Yii Framework Forum
Viewing all articles
Browse latest Browse all 18717

[Solved] Checkboxlist E Relazioni Many_Many

$
0
0
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 :)

Viewing all articles
Browse latest Browse all 18717

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>