Domanda

Sto solo cominciando imparare ad usare Yii , e già riuscito a fare alcune cose di base.

Diciamo che ho due semplici tabelle: "utenti" e "progetti", dove il rapporto è di 1 a molti (un utente può avere molti progetti)

Ho generato CRUD usando GII, ma nella "pagina utente creare / modificare" questo non fornisce la discesa, ma solo un campo di testo in cui ho bisogno di inserire l'ID utente.

Quando si modifica un progetto, mi piacerebbe avere un elenco a discesa dove posso selezionare un utente (così l'elemento dovrebbe visualizzare un elenco di nomi utente).

Presumo GII non è in grado di generare il codice di controllo e visualizzazione per questo

Quale sarebbe la migliore pratica per fare questo?

Ho già dichiarato i rapporti come indicato nel http: // www .yiiframework.com / doc / guide / 1.1 / it / database.arr

public function relations()
{
   return array(
        'projects_rel'=>array(self::BELONGS_TO, 'Users', 'user_id'),
    );
}

e

public function relations()
{
    return array(
        'users_rel'=>array(self::HAS_MANY, 'Projects', 'project_id'),
    );
}
È stato utile?

Soluzione

Trova il codice di esempio per generare l'elenco degli utenti

<?php
    $form = $this->beginWidget('CActiveForm', array(
                'id' => 'project-form',
                'enableAjaxValidation' => true,
            ));

?>

<?php echo $form->dropDownList($model, 'user_id',
                CHtml::listData(Projects::model()->with('projects_rel')->findAll(), 'id', 'username'),
                array('style'=>'width:150px;')
                ); ?>

Altri suggerimenti

Checkout questi estensione gii per la generazione di CRUDs estese:

Entrambi sono in grado di rendere moduli con ingressi rapporto. GTC utilizza un widget relazione per questi ingressi che possono essere personalizzati.

Non dimenticare di togliere il commento

$ this-> performAjaxValidation ($ modello)

sul controller o dovrete elementi creati al posto di uno!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top