Wie in Bezug stehende Werte in Yii zu bekommen?
Frage
Schema:
CITY
ID (int)
Name (string)
Status (int)
CITY_STATUS
ID (int)
Name (string)
-
Wenn ich eine Stadt anzuzeigen (in der Ansicht Ansicht), ich möchte den zugehörigen CITY_STATUS.Name Wert anzuzeigen, anstelle des CITY.Status Wert
-
Wenn ich eine Stadt hinzufügen oder aktualisieren, möchte ich nach unten aller CITY_STATUS.Names im Drop-down
einen Tropfen anzuzeigen
Wie kann ich das in Yü?
Lösung
Ich glaube, ich es selbst würde antworten.
Frage 1
Die Beziehungen sind einfacher, wenn Sie Setup ein Fremdschlüssel in der Datenbank zuerst. Um dies zu tun, müssen MySQL (nicht SQLite) mit dem InnoDB-Engine (nicht MyISAM) und das betreffende Feld verwenden, muss auf sie einen Index. Dann Gii Willen Setup-Funktion die Beziehungen automatisch für Sie. Andernfalls müssen Sie es manuell in den Beziehungen zu tun haben () Funktion des Modells in Frage.
Um einen ähnlichen Wert in einer Ansicht verwenden:
In protected / views / [Modellname] /view.php, in der CDetailView Array-Attribute ändern
'Status'
array('label'=>'Status', 'value'=>$model->RelationName->Name)
wo RelationName ist der Name der Beziehung
Um einen ähnlichen Wert in einem Index anzeigen, ändern protected / views / [Modellname] / _ view.php (beachten Sie den Unterstrich), beispielsweise in diesem Fall benutzen würden Sie ändern
$data->Status
$data->RelationName->Name
Um einen ähnlichen Wert in einer Admin-Ansicht, in der CGridView verwenden Widget aufrufen, in der Spalten-Array ersetzen sagen wir
'Status'
mit
array('name'=>'Status', 'header'=>'Status', 'value'=>'$data->RelationName->Name')
(beachten Sie die Verwendung des Variable $ data, und nicht $ Modell oder $ Datenprovider sagen). Immer noch versuchen, herauszufinden, wie zu sortieren und zu filtern ...
Frage 2
Um ein Dropdown-Menü, in protected / views / [Modellname] / _ form.php:
Veränderung
<?php echo $form->textField($model,'Status'); ?>
<?php echo $form->dropDownList($model,'Status', CHtml::listData(Status::model()->findAll(), 'ID', 'Name')); ?>
el Chef, Sie sind ein Gentleman und ein Gelehrter.