如何在Yii中获取相关值?

时间:2010-11-23 22:19:53

标签: php yii

架构:

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

CITY_STATUS
ID (int)
Name (string)
  1. 当我显示城市时(在视图视图中),我想显示相关的CITY_STATUS.Name值,而不是CITY.Status值

  2. 当我添加或更新城市时,我想在下拉列表中显示所有CITY_STATUS.Names的下拉列表

  3. 我如何在Yii中执行此操作?

1 个答案:

答案 0 :(得分:8)

猜猜我会自己回答。

问题1

如果首先在数据库中设置外键,则关系会更容易。要做到这一点,你需要使用InnoDB引擎(而不是MyISAM)的MySQL(而不是SQLite),并且有问题的字段需要一个索引。然后,Gii将自动为您设置关系功能。否则,您必须在相关模型的relations()函数中手动执行此操作。

在视图中使用相关值:

在protected / views / [model name] /view.php中,在CDetailView属性数组中,更改

'Status'

array('label'=>'Status', 'value'=>$model->RelationName->Name)

其中RelationName是关系的名称

要在索引视图中使用相关值,请更改protected / views / [model name] / _ view.php(注意下划线),例如在这种情况下,您将更改

$data->Status

$data->RelationName->Name

要在Admin视图中使用相关值,在CGridView小部件调用中,在columns数组中,替换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')); ?>
首席,你是一位绅士和学者。