2014-05-23 2 views
1

요구 사항에 따라 질문에 여러 답변을 동적으로 추가해야하는 QA 앱을 만들고 있습니다. 이것에 대한 나는 질문과 답변을 가지고있는 물건을 보내고있다.객체 배열을 반복하고 laravel에서 값 가져 오기 PHP

question={ 
    'question_text':'what is your name', 
    'answers':[ 
      {'answer_text':'some answer','isCorrect':'1'}, 
      {'answer_text':'some answer','isCorrect':'1'}, 
      {'answer_text':'some answer'} // answer may or may not have isCorrect key 
     ] 
    } 

서버 측에는 질문 용으로 1 개, 대답 용으로 1 개씩 2 개의 테이블 또는 마이그레이션이 있습니다. 응답 테이블에는 question_id, answer_text' and isCorrect '필드가 있습니다. question_id은 응답 테이블에있는 질문의 외래 키입니다.

내가 뭐하는 거지 객체가

$question_text=Input::get('question_text'); 
$answers=Input::get('answers'); 

$question=new Question; 
$question->question_text=$question_text; 
$question->save(); 


foreach($answers as $ans){ 
    $answer=new Answer; 
    $answer->question_id=$question->id; 
    $answer->answer_text=$ans->answer_text; 
    if($answer->isCorrect){ 
     $answer->is_correct=$ans->isCorrect; 
    } 
    else{ 
     $answer->is_correct=0; 
    } 
    $answer->save(); 
} 

이다 저장할 그러나 반복하면서 내가 여기서 뭐하는 거지 무슨 오류

`production.ERROR: exception 'ErrorException' with message 'Trying to get property of non-object'` 

이있다. 나는 PHP로 처음으로 일하고있다. Javascript 또는 Python 방식으로 반복하려고합니다. Answer array 객체의 값을 가져와 저장할 수있는 방법을 알려주십시오.

+0

'$ ans.answer_text; '의 의미는 무엇입니까? '.' PHP의 텍스트 연결 연산자입니다. 이것은 Java가 아닙니다. 아마도'->'를 원할 것입니다. – LSerni

+1

또한 속성이 존재하는지 잘 모르는 경우에는'$ answer-> isCorrect'를 사용하지 말아야합니다. 반드시'isset()'를 사용하여 확인하거나'is_correct'를 기반으로 할당하십시오 :'$ answer-> isCorrect = isset ($ ans-> is_correct)? (int) $ ans-> is_correct : 0;' – LSerni

+0

그건 PHP의 -> 표기법입니다. 나는 그것을 바로 잡았다. 고맙습니다 Iserni –

답변

5

배열 변수를 올바르게 참조하지 않는 것 같습니다. 작동해야 함 :

foreach($answers as $ans){ 
    $answer=new Answer; 
    $answer->question_id=$question->id; 
    $answer->answer_text=$ans['answer_text']; 
    $answer->is_correct = isset($ans['isCorrect']); 
    $answer->save(); 
} 

p.s. 임 확실하지 않다에 대한 forEach - 나는 그것을 놀랐어요 -하지만 당신은 아마 foreach 정상적인 표준을 확인하기 위해 그것을 바꿔야한다

+0

질문에 약간의 변경이있었습니다. 다시 한 번보고 귀하의 답변에 조건이 있다고 생각하십시오. 고맙습니다. –

+0

답변을 업데이트했습니다. 또한 이것이 작동하지 않는다면 오류가 발생하는 "행"을 알려야합니다. 그 행의 정확한 코드를 알려주십시오. – Laurence

+0

내가 발견 한 또 다른 문제가 해결되었습니다. 최신 코드를 사용하십시오. – Laurence

관련 문제