2010-11-23 66 views
4

架構:如何在Yii中獲取相關值?

CITY 
ID (int) 
Name (string) 
Status (int) 

CITY_STATUS 
ID (int) 
Name (string) 
  1. 當我顯示一個城市(在視圖視圖),我想,而不是CITY.Status值顯示相關CITY_STATUS.Name值,

  2. 當我添加或更新一個城市,我想顯示下拉所有CITY_STATUS.Names的倒在下拉

如何在Yii中做到這一點?

+0

4 upvotes for the answer,0 for the question?滑稽!我正在更新兩者。很有幫助。 – Smandoli 2012-08-25 20:38:47

回答

8

猜猜我會自己回答。

問題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主任,你是一個紳士和學者。

+2

我發現用`CDetailView`這個語法工作:`RelationName.Name`。從http://www.yiichina.net/forum/index.php/topic/34124-cgridview-get-relationship-value/得到我的幫助 – Smandoli 2012-08-25 20:55:14