2017-09-23 7 views
0

laravelでは、データベースからデータを取得するために雄弁を使用しています。関連する行の配列としての結合結果のマッピング

私は2つのテーブルからの質問」を持っているし、「オプション」 の質問 "

$questions = Question::join('options', 'options.question_id', 'questions.id'); 

return QuestionResource($questions); 

に「オプション」を結合するために雄弁メソッドを使用しています。これは、データの予想集まり、同じ質問を返しませんコレクションに複数回出現し、それぞれはoptions.question_idとquestion.idが同じである異なるオプションで結合されます。

[ 
    { 
     id: 1, 
     text: "Africa is a...?", 
     // joined option 
     question_id: 1, 
     value: "city", 
     answer: false 
    }, 
    { 
     id: 1, 
     text: "Africa is a...?", 
     // joined option 
     question_id: 1, 
     value: "planet", 
     answer: false 
    }, 
    { 
     id: 1, 
     text: "Africa is a...?", 
     // joined option 
     question_id: 1, 
     value: "continent", 
     answer: true 
    }, 
    { 
     id: 2, 
     text: "Albert Heinstein was a...?", 
     // joined option 
     question_id: 2, 
     value: "comedian", 
     answer: false 
    }, 
    { 
     id: 2, 
     text: "Albert Heinstein was a...?", 
     // joined option 
     question_id: 1, 
     value: "genius scientist", 
     answer: true 
    } 
] 

すべてのオプションを関連する質問内のキーの下にネストする必要があります。 Like

[ 
    { 
     id: 1, 
     text: "Africa is a...?", 
     // joined options 
     options: [ 
      {value: "city", answer: false}, 
      {value: "planet", answer: false}, 
      {value: "continent", answer: true} 
     ] 
    }, 
    { 
     id: 2, 
     text: "Albert Heinstein was a...?", 
     // joined options 
     options: [ 
      {value: "comedian", answer: false}, 
      {value: "genius scientist", answer: true} 
     ] 
    } 
] 

私はlaravelの雄弁でこれを達成できますか、余分なロジックを適用する必要があります。あなたは、余分なロジックをapplieしたい場合

+1

を助けるかもしれないあなたは$ questions' '内に受信され、配列のコレクション変数や配列を生じたパスに応じて。あるいは単純な 'ORM'構造体を使っていたら' Question'モデル内で関係を準備するだけで、 'with'や' load'メソッドや直接呼び出しを使ってコレクション内で取得できます –

答えて

1

このコードは、PHPだけでループ内であなたの配列を準備する必要があり、あなたに

<?php 
    $combinedqst = array('id' => '','text'=> '','option'=> array('value' => array('value' => ,''), 'answer' => '')); 
    $ids = array('id' => , ''); 
    //loop through questions array 1st loop for getting the question 
    foreach($questions as $question) { 
     $count = 0; 
    //check if question is already looped 
     if(!in_array($question["id"],$ids)){ 
    //2end loop to get the opstions 
     foreach($questions as $question_check) { 

       if($question_check["id"] == $question["id"]){ 
        if($count == 0){ 
        $combinedqst["id"] = $question["id"]; 
        $combinedqst["text"] = $question["text"]; 
        } 
        $count = 1; 
        array_push($combinedqst["option"]['value'],$question_check['value']); 
        array_push($combinedqst["option"]['answer'],$question_check['answer']); 
       } 

      } 
     } 
    array_push($ids,$question["id"]); 
    } 
vardump($combinedqst); 
関連する問題