Yii2 - 将值传递给下拉列表中的Where子句

时间:2018-06-12 12:42:32

标签: yii2

我有两种模式:

QuestionCategories

    public function attributeLabels()
{
    return [
        'question_category_id' => 'ID',
        'course_id' => Yii::t('course', 'Course'),
        'name' => Yii::t('course', 'Question Category Name'),
        'is_status' => Yii::t('course', 'Is Status'),
    ];
}

问题

    public function attributeLabels()
{
    return [
        'question_id' => Yii::t('course', 'Question ID'),
        'question_category_id' => Yii::t('course', 'Question Category'),
        'question_course_id' => Yii::t('course', 'Course'),
        'instructor_id' => Yii::t('course', 'Instructor'),
        'question_name' => Yii::t('course', 'Question Name'),
    ];
}

问题的视图中,我想创建一个下拉列表,其中 QuestionCategories 中的course_id等于问题中的question_course_id。

我如何实现这一目标?

看看到目前为止我做了什么。

                <?= $form->field($model, 'question_category_id')->widget(Select2::classname(), [
                'data' => ArrayHelper::map(QuestionCategories::find()->all(),'question_category_id','name'),
                'language' => 'en',
                'options' => ['placeholder' => 'Select Question Category ...'],
                'pluginOptions' => [
                'allowClear' => true
                ],
            ]);
            ?>  

由于

3 个答案:

答案 0 :(得分:0)

question_course_id必须先预先确定,然后才能将其添加到您的条件中:

<?= $form->field($model, 'question_category_id')->widget(Select2::classname(), [
            'data' => ArrayHelper::map(QuestionCategories::find()->where(['course_id' => $your_Course_id])->all(),'question_category_id','name'),
            'language' => 'en',
            'options' => ['placeholder' => 'Select Question Category ...'],
            'pluginOptions' => [
            'allowClear' => true
            ],
        ]);
        ?>  

请参阅Yii 2 Guide - 查询构建器&amp;积极的记录。

答案 1 :(得分:0)

我使用getRequest()来解决问题。这使我能够获得参数。

        <?php $courseid = Yii::$app->getRequest()->getQueryParam('acs_id');?>
            <?= $form->field($model, 'question_category_id')->widget(Select2::classname(), [
                'data' => ArrayHelper::map(QuestionCategories::find()->where(['course_id' => $courseid, 'is_status'=>0])->all(),'question_category_id','name'),
                'language' => 'en',
                'options' => ['placeholder' => 'Select Question Category ...'],
                'pluginOptions' => [
                'allowClear' => true
                ],
            ]);
            ?> 

谢谢大家

答案 2 :(得分:0)

考虑到Kalu的回答和你的评论,我认为Yii的方法是通过Controller将参数传递给你的视图,如下所示:

//The parameter is $acs_id. How do I pass it from the Controller to the Dropdownlist in the View 
public function actionCreate($acs_id) { 
   $model = new Questions(); 
   if($model->load(Yii::$app->request->post()) && $model->save()) { 
       return $this->redirect(['view', 'id' => $model->question_id]); } 
   else { return $this->render('create', [ 'model' => $model, 'acs_id' => $acs_id]); } 

通过这种方式,您可以在视图中访问$ acs_id作为变量,而无需直接访问请求。