2014-05-23 64 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爲答案。答案表有三個字段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的方式來迭代它。 告訴我如何獲得答案數組對象的值並存儲它們。

+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的符號。我糾正了這一點。 Thanx 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

相關問題