架构:
CITY
ID (int)
Name (string)
Status (int)
CITY_STATUS
ID (int)
Name (string)
Run Code Online (Sandbox Code Playgroud)
当我显示一个城市(在视图视图中)时,我想显示相关的CITY_STATUS.Name值,而不是CITY.Status值
当我添加或更新城市时,我想在下拉列表中显示所有CITY_STATUS.Names的下拉列表
我怎么在Yii这样做?
猜猜我会自己回答.
问题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酋长,你是一位绅士和学者.
| 归档时间: |
|
| 查看次数: |
10759 次 |
| 最近记录: |