2015-01-29 8 views
0

저는 Question 모델과 Answers 모델을 가지고 있습니다.이 모델에서 Question to Answer는 one-many 관계입니다.부모 - 자식 관계 모델에 대한 Yii2.0 체크 박스 목록 활용

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] 

내가 저장하고 예를 클릭하면 다음과 같이 양식에 표시됩니다 있도록 내가 Yii2에서 checkboxlist을 구현하려면 어떻게합니까. Answer 1과 Answer 3이 체크되면, post는 "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']); 
    } 
+0

코드를 추가하십시오. – arogachev

+0

안녕하세요 arogachev, 내 코드를 추가했습니다 .ths – esiaz

+0

[Yii2 확인란 목록에 체크 된 값을 캡처하지 않음] (http://stackoverflow.com/questions/28206002/yii2-checkboxlist-not-capturing-the-checked-values) – arogachev

답변

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의 색인을 생성 한 배열을 설명의 레이블과 함께 가져옵니다.

체크 박스 목록은 데이터를 배열로 제출하므로 속성의 이름이 배열이어야합니다. 따라서 체크 박스 목록의 속성은 'answers ['형식이어야합니다. $ question-> id. '] []'. 양식이 제출되면 질문 ID에 대한 색인과 함께 해당 질문에 대해 선택된 응답의 하위 배열이있는 answer라는 속성이 생깁니다. 이렇게하면 대답이 어떤 질문에 대해 선택되었는지 알 수 있습니다. 나는 이것이 도움이되기를 바랍니다!

+0

시도했지만 시도가 "비 - 개체의 속성을 얻으려고". 내가 var_dump ($ per_qn-> answermodel) 일 때, 그것은 객체들의 배열이다. – esiaz

+0

@ esiaz 이것이 위의 코드에서 볼 수있는 내용입니다. Yii2가 처리해야하는 여러 가지 모델 유형의 작업을 수행중인 것으로 보입니다. 모델을 게시 할 수 있습니까? 여기서는 데이터베이스가 설정되어 $ perqnamodel에 많은 per_qn이 있고 각 per_qn에 많은 $ per_ans가 있다고 가정합니다. 그 맞습니까? –

+0

안녕하세요, Joe Miller, 제 모델에 대한 정보를 추가했습니다. 한 가지 질문은 여러 가지 대답을 가질 수 있으며 모든 대답은 하나의 질문에만 속합니다. – esiaz