代码之家  ›  专栏  ›  技术社区  ›  Neil McGuigan

如何在Yii中获取相关值?

  •  4
  • Neil McGuigan  · 技术社区  · 13 年前

    架构:

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

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

    在Yii我该怎么做?

    1 回复  |  直到 13 年前
        1
  •  8
  •   Neil McGuigan    13 年前

    我想我会自己回答的。

    问题1

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

    要在视图中使用相关值,请执行以下操作:

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

    'Status'
    

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

    其中relation name是关系的名称

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

    $data->Status
    

    $data->RelationName->Name
    

    要在管理视图、CGridView小部件调用、columns数组中使用相关值,请替换为

    '状态'
    

    具有

    array('name'=>'Status', 'header'=>'Status', 'value'=>'$data->RelationName->Name')
    

    (注意变量$data的使用,而不是$model或$dataProvider)。仍在想如何排序和筛选。。。

    问题2

    要使用下拉菜单,请在protected/views/[model name]/\u form.php中执行以下操作:

    改变

    <?php echo $form->textField($model,'Status'); ?>
    

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

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