架构:
CITY
ID (int)
Name (string)
Status (int)
CITY_STATUS
ID (int)
Name (string)
当我显示一个城市(在 View View 中)时,我想显示相关的 CITY_STATUS.Name 值,而不是 CITY.Status 值
当我添加或更新城市时,我想在下拉列表中显示所有 CITY_STATUS.Names 的下拉列表
我如何在 Yii 中执行此操作?
最佳答案
猜猜我会自己回答。
问题一
如果您先在数据库中设置外键,关系会更容易。为此,您需要将 MySQL(不是 SQLite)与 InnoDB 引擎(不是 MyISAM)一起使用,并且相关字段需要一个索引。然后,Gii 会自动为你设置关系函数。否则,您必须在相关模型的 relations() 函数中手动执行此操作。
在 View 中使用相关值:
在protected/views/[model name]/view.php中,在CDetailView属性数组中,更改
'Status'
到
array('label'=>'Status', 'value'=>$model->RelationName->Name)
其中 RelationName 是关系的名称
要在索引 View 中使用相关值,请更改 protected/views/[model name]/_view.php(注意下划线),例如在这种情况下您将更改
$data->Status
到
$data->RelationName->Name
要在管理 View 中使用相关值,请在 CGridView 小部件调用中,在列数组中替换 say
'Status'
与
array('name'=>'Status', 'header'=>'Status', 'value'=>'$data->RelationName->Name')
(注意变量 $data 的使用,而不是 $model 或 $dataProvider)。仍在尝试弄清楚如何排序和过滤...
问题2
要使用下拉菜单,在 protected/views/[model name]/_form.php 中:
改变
<?php echo $form->textField($model,'Status'); ?>
到
<?php echo $form->dropDownList($model,'Status', CHtml::listData(Status::model()->findAll(), 'ID', 'Name')); ?>
酋长,君子君子。
关于php - 如何在 Yii 中获取相关值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261563/