Yii2-Dropdownlist以加载其他属性

Yii2-Dropdownlist以加载其他属性,yii2,Yii2,我有这个模型课 public function attributeLabels() { return [ 'id' => Yii::t('course', 'ID'), 'course_code' => Yii::t('course', 'Course Code'), 'course_type' => Yii::t('course', 'Course Type'), 'course_title' =>

我有这个模型课

public function attributeLabels()
{
    return [
        'id' => Yii::t('course', 'ID'),
        'course_code' => Yii::t('course', 'Course Code'),
        'course_type' => Yii::t('course', 'Course Type'),
        'course_title' => Yii::t('course', 'Course Title'),
        'course_unit' => Yii::t('course', 'Course Unit'),
    ];
}
在Dropdownlist更改中,我想加载并显示课程代码、课程类型、课程标题和课程单元。但应该只保存课程名称。除课程标题外,其他内容应仅显示而不保存

我只能显示课程名称。这是我对下拉列表的看法

<?= $form->field($modelDetail, "course_id")->widget(Select2::classname(), [
'data' => ArrayHelper::map(app\modules\course\models\CourseMaster::find()->where(['is_status'=>0])->all(),'id','course_title'),
'language' => 'en',
'options' => ['placeholder' => '--- Select Course ---',
],
'pluginOptions' => [
'allowClear' => true
],
]); ?>  

如果您只想显示其他字段而不想在表单提交时发送它,您可以将字段标记为
已禁用

<?= $form->field($modelDetail, 'course_code')->textInput([
    'disabled' => true,
]) ?>


这将呈现无法直接编辑的输入,并且不会在表单提交时发送。

您可以将数据保存在下拉列表标签中,这将是一个更简单的选项。对ArrayHelper::map($array,$from,$to,$group=null)中的第三个参数使用闭包,如下所示

ArrayHelper::map(
  app\modules\course\models\CourseMaster::find()->where(['is_status'=>0])->all(),
  'id',
  function($model){
    return $model['course_title']." - ".$model['course_code'];
  }
)

您希望在下拉列表中选择任何选项时显示其余属性。您应该绑定
onchange
方法并向一个操作抛出一个ajax调用,在该操作中,您将加载一个包含三个字段的视图,在加载视图之前,根据将通过ajax调用发送的
课程id
选择适当的模型,我不明白你说的另一部分,我只想把课程标题保存到你要保存此表单的模型?添加完整的视图和控制器代码我只想保存课程标题这意味着我只想将课程标题保存到数据库中,而其他标题用于显示。2.您能给我一个示例,说明如何使用ajax将onchange方法与课程id绑定。我已经添加了控制器您的
操作创建
看起来不像是提交您添加的表单,因为它似乎没有通过
$modeldail
?它是从哪里来的?它是哪种型号?您可以通过下拉菜单附加(连接)任何要显示的字段。Secondary@MuhammadOmerAslam建议,使用Ajax并显示数据。对不起,这是个错误。它是*$modelDetail**而不是**$model他希望在选择课程标题时显示相关字段,然后只想保存
课程标题
,但也不确定保存到哪个模型中
ArrayHelper::map(
  app\modules\course\models\CourseMaster::find()->where(['is_status'=>0])->all(),
  'id',
  function($model){
    return $model['course_title']." - ".$model['course_code'];
  }
)