使用Yii2.0复选框列表用于亲子关系模型

时间:2015-01-29 13:23:10

标签: yii2 checkboxlist

我有一个问题模型和答案模型,其中问题解答是一对多的关系。我如何在Yii2中实现checkboxlist,以便它将以如下形式显示:

Form: 

Question 1 description
     [checkbox] Answer 1 description
     [checkbox] Answer 2 description

Question 2 Description
     [checkbox] Answer 3 description
     [checkbox] Answer 4 description

Question 3 Description
     [checkbox] Answer 5 description
     [checkbox] Answer 6 description

[Save button]

当我点击保存时,例如。答案1和答案3被检查,帖子应该返回" 1,3"在一个字符串中。我如何使用复选框列表?我尝试使用我的代码但是现在只检查了答案5和答案6的值。如果选中答案1到答案4,则不会捕获它们。我的循环应该有问题。

希望有人可以帮助我.. 非常感谢

更新:我重新构建了我的代码,但它仍然只捕获属于上一个问题的答案中的值:

<?php
$form = ActiveForm::begin([
    'id' => 'form',
    'type' => ActiveForm::TYPE_HORIZONTAL,

]);
?>

<?php

$qnamodel = $questionmodel->joinWith('answermodel')->all();
$selected_array = array_map('intval', explode(',', $selected_list));    
foreach($qnamodel as $num=>$per_qn)
{

        echo '<div class="form-group"><div class="col-sm-9">'.$per_qn->QN_DESC.'</div></div>';

        foreach($per_qn->answermodel as $per_ans)
        {

            $arr_list[$per_qn->QA_TABLE_ID][$per_ans->QA_ANS_TABLE_ID] = $per_ans->ANS_DESC;
        }


        $recordmodel->ANS_TABLE_ID = $selected_array;

    echo $form->field($recordmodel, 'ANS_TABLE_ID', ['template' => "{label}\n{input}\n{hint}"])->checkboxList($arr_list[$per_qn->QA_TABLE_ID], $selected_array, ['separator' => '<p>'])->label(false);


echo '<p><br />';
}

?>

<?= Html::submitButton('save', ['class' => 'btn btn-primary']) ?>
<?phpgmst
ActiveForm::end();
?>


In Question Model
    public function getAnswermodels()
    {
        return $this->hasMany(Answermodel::className(), ['QN_TABLE_ID' => 'QA_TABLE_ID']);
    }

In Answer Model
    public function getQNTABLE()
    {
        return $this->hasOne(Questionmodel::className(), ['QA_TABLE_ID' => 'QN_TABLE_ID']);
    }

1 个答案:

答案 0 :(得分:2)

如果我理解你正确地看待逻辑,你应该能够做到这样的事情。我已经添加了通用字段名称和表名,以使代码更容易阅读。我还删除了一些其他代码,以便更容易看到发生了什么。这应该替换视图的所有已发布代码;

    foreach ($model->questions as $question) {
        echo '<p>' . $question->description . '</p>';
        if ($question->answers) {
            echo $form->field($question, 'answers[' . $question->id . '][]')->checkboxList(yii\helpers\ArrayHelper::map($question->answers, 'id', 'description'), ['separator' => '<p>']);
        }
    }

第一部分介绍了模型的所有可能问题。如果该问题有答案,则会显示这些答案的复选框列表。 arrayHelper是从一组模型中获取值数组的简单方法;给定一组模型,您可以使用它来获取由id索引的数组,其中包含描述中的标签。

非常重要的是要注意checkboxlist将数据作为数组提交,因此属性的名称必须是数组。因此,checkboxlist的属性需要采用'answers ['形式。 $ question-&gt; id。 '] []'。提交表单后,您将获得一个名为answer的属性,其中包含问题ID的索引,以及为该问题选择的答案的子数组。通过这种方式,您将知道选择了哪个问题。我希望这有帮助!