2017-01-10 10 views
1

私はユーザーが0から10までの回答を提供するアンケートウェブサイトを作っています。キャストを試して、すべての質問と答えを1行に保存しました。関連性のあるラーベルキャスト

はこれがスコアフィールドには、データベース

{"5":8,"6":8} 

にこれが予想されるとしてどのように見えるかです。 「5」および「6」は質問のIDであり、8はユーザによって提供されるスコアである。

回答を照会することはできますが、質問との関係を含めることができるのだろうかと思います。それは、配列にキャストすることは可能であるが、Laravelにおける関係を含める:

{"5" => {"question: ...", "answer: ..."} 

は、だから私の質問は、次のように私は結果を見たいですか?または、配列をループして各行の質問データを取得する必要があります。

ありがとうございます!

+0

私はこれが不可能だと信じています。私はあなたの配列をループし、 'Question :: find($ id)'を使うべきだと思います。 –

答えて

1

カスタムアクセサやミューテータを使用して任意の操作を実行できますが、関係をdbに格納することはお勧めしません。独立して変更される可能性のあるオブジェクト全体を参照する必要はありません。そのため、IDをデータベースに保存し、dbから得点を取り出した後に出力を飾ります。

public function getScoresAttribute($value) 
{ 
    // if using casts to array, this should already be done 
    $scores = json_decode($value, true); 

    $questions = Question::whereIn('id', array_keys($scores))->get(); 
    $rs = []; 

    $questions->each(function($q) use ($rs, $scores) { 
     $rs[$q->id] = [ 
      'question' => $q->toArray(), 
      'answer' => $scores[$q->id], 
     ]; 
    }); 

    return $rs; 
} 

は今、あなただけのような何かすることができます

dd($survey->scores); 

をそして、あなたは装飾されたデータを取得します。

関連する問題