如何在Yii中获取相关值?

Nei*_*gan 4 php yii

架构:

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

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

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

我怎么在Yii这样做?

Nei*_*gan 8

猜猜我会自己回答.

问题1

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

要在视图中使用相关值:

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

'Status'
Run Code Online (Sandbox Code Playgroud)

array('label'=>'Status', 'value'=>$model->RelationName->Name)
Run Code Online (Sandbox Code Playgroud)

其中RelationName是关系的名称

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

$data->Status
Run Code Online (Sandbox Code Playgroud)

$data->RelationName->Name
Run Code Online (Sandbox Code Playgroud)

要在Admin视图中使用相关值,请在CGridView小部件调用中的columns数组中,替换say

'Status'
Run Code Online (Sandbox Code Playgroud)

array('name'=>'Status', 'header'=>'Status', 'value'=>'$data->RelationName->Name')
Run Code Online (Sandbox Code Playgroud)

(注意使用变量$ data,而不是说$ model或$ dataProvider).还在试图弄清楚如何排序和过滤......

问题2

要使用下拉菜单,请在protected/views/[model name]/_ form.php中:

更改

<?php echo $form->textField($model,'Status'); ?>
Run Code Online (Sandbox Code Playgroud)

<?php echo $form->dropDownList($model,'Status', CHtml::listData(Status::model()->findAll(), 'ID', 'Name')); ?>
Run Code Online (Sandbox Code Playgroud)

el酋长,你是一位绅士和学者.

  • 我发现使用`CDetailView`这个语法有效:`RelationName.Name`.得到了我的帮助http://www.yiichina.net/forum/index.php/topic/34124-cgridview-get-relationship-value/ (2认同)