2017-01-10 5 views
1

Я делаю опрос веб-сайт, где пользователи дают ответы от 0 до 10. Я экспериментировал с отбрасывает, чтобы сохранить все вопросы и ответить в 1 строке.Laravel отливки с отношением

Это то, что поле оценки выглядит в базе данных

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

Это, как и ожидалось. «5» и «6» являются идентификаторами вопроса, а 8 - это оценки, предоставленные пользователем.

Мне интересно, можно ли запросить ответы, но включить отношение к вопросу. Я хотел бы видеть результаты следующим образом

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

Так мой вопрос: можно ли бросить в массив, но включают в себя отношения в Laravel? Или мне нужно будет закодировать массив и получить данные вопроса для каждой строки.

Спасибо!

+0

Я считаю, что это невозможно. Я думаю, вам нужно пройти через массив и использовать 'Question :: find ($ id)'. –

ответ

1

Вы можете делать все, что хотите, с помощью пользовательских аксессуаров и мутаторов, но я бы не рекомендовал хранить отношение в db. Вам не нужны ссылки на целые объекты, которые могут меняться независимо, поэтому сохраните их в идентификаторах и украсьте свой результат после извлечения баллов из 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); 

И вы получите декорированные данные.

Смежные вопросы