在父子关系模型中使用Yii2.0复选框列表

在父子关系模型中使用Yii2.0复选框列表,yii2,checkboxlist,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 descr

我有一个问答模型,其中问答是一个多关系。如何在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]
当我点击save(保存)并勾选答案1和答案3时,post应以字符串形式返回“1,3”。如何使用checkboxlist实现这一点?我尝试了我的代码,但现在它只捕获答案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']);
    }


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

    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>']);
        }
    }
foreach($model->问题作为$question){
回显“”.$question->description.“

”; 如果($问题->答案){ echo$form->field($question,'answers['.$question->id.][]')->复选框列表(yii\helpers\ArrayHelper::map($question->answers,'id','description'),['separator'=>''); } }
第一部分循环介绍模型中所有可能的问题。如果该问题有答案,则会显示这些答案的复选框列表。arrayHelper是一种从模型数组中获取值数组的简单方法;给定一个模型数组,您可以使用它来获取一个按id索引的数组,其中包含描述中的标签


需要注意的是,checkboxlist将以数组的形式提交数据,因此属性的名称必须是数组。因此,复选框列表的属性需要采用“answers[”.$question->id.][]”的形式。提交表单时,您将获得一个名为answer的属性,该属性具有问题id的索引,以及为该问题选择的答案的子数组。通过这种方式,您将知道选择回答的问题是什么。我希望这有帮助

请添加代码。你好,arogachev,我已经添加了我的代码..可能的副本已经删除了另一个我已经尝试过,但是我得到了“尝试获取非对象的属性”。当我使用var_dump($per_qn->answermodel)时,它是一个对象数组。@esiaz这是我希望从您上面发布的代码中看到的。在我看来,在你看来,你正在做很多模型类型的事情,这些事情应该由Yii2按原样处理。请把你的模型贴出来好吗?我在这里假设您的数据库是这样设置的:$perqnamodel有许多peru-qn,每个peru-qn有许多$peru-an。对吗?嗨,乔·米勒,我已经添加了关于我的模型的信息。一个问题可以有很多答案,每个答案只属于一个问题。