CITY
ID (int)
Name (string)
Status (int)
CITY_STATUS
ID (int)
Name (string)
當我顯示一個城市(在視圖視圖),我想,而不是CITY.Status值顯示相關CITY_STATUS.Name值,
當我添加或更新一個城市,我想顯示下拉所有CITY_STATUS.Names的倒在下拉
如何在Yii中做到這一點?
CITY
ID (int)
Name (string)
Status (int)
CITY_STATUS
ID (int)
Name (string)
當我顯示一個城市(在視圖視圖),我想,而不是CITY.Status值顯示相關CITY_STATUS.Name值,
當我添加或更新一個城市,我想顯示下拉所有CITY_STATUS.Names的倒在下拉
如何在Yii中做到這一點?
猜猜我會自己回答。
問題1
的關係是比較容易,如果你安裝在你的數據庫中的外鍵第一。要做到這一點,你需要使用MySQL(而不是SQLite)和InnoDB引擎(而不是MyISAM),並且所涉及的字段需要一個索引。然後,Gii會自動爲您設置關係功能。否則,您必須在相關模型的relations()函數中手動執行此操作。
要在視圖使用一個相關值:
在保護/視圖/ [型號名稱]何種交往,在CDetailView屬性陣列,更改
'Status'
到
array('label'=>'Status', 'value'=>$model->RelationName->Name)
其中RelationName是關係的名稱
要在索引中使用相關值查看,更改保護/視圖/ [機型名稱]/_ view.php(注意下劃線),例如在這種情況下,你會改變
$data->Status
到
$data->RelationName->Name
在使用相關值的管理視圖,在CGridView插件呼叫,列陣列中,取代說
'Status'
與
array('name'=>'Status', 'header'=>'Status', 'value'=>'$data->RelationName->Name')
(注意使用變量$ data,而不是說$ model或$ dataProvider)。仍在試圖弄清楚如何排序和過濾器...
問題2
要使用下拉菜單,在保護/視圖/ [機型名稱]/_ form.php的:
變化
<?php echo $form->textField($model,'Status'); ?>
到
<?php echo $form->dropDownList($model,'Status', CHtml::listData(Status::model()->findAll(), 'ID', 'Name')); ?>
EL主任,你是一個紳士和學者。
我發現用`CDetailView`這個語法工作:`RelationName.Name`。從http://www.yiichina.net/forum/index.php/topic/34124-cgridview-get-relationship-value/得到我的幫助 – Smandoli 2012-08-25 20:55:14
4 upvotes for the answer,0 for the question?滑稽!我正在更新兩者。很有幫助。 – Smandoli 2012-08-25 20:38:47