Это данные из базы данных, которые я пытаюсь классифицировать и классифицировать, я поставил один вопрос с ответами для каждого типа: текст, да или нет, множественный выбор, рейтинг.
{
"id":1,
"name":"Evaluacion al docente por parte de los estudiantes",
"description":"Evaluacion al docente de la clase de Electronica 1 de la carrera de Ingenieria",
"user_id":1,
"anonymous":0,
"created_at":"2019-12-09 10:30:50",
"updated_at":"2019-12-10 08:43:40",
"survey_questions":[
{
"id":1,
"question":"Cual es su opinion acerca de la oficina de telematica",
"user_id":1,
"survey_section_id":1,
"response_type_id":1,
"optional":0,
"num":null,
"rank":null,
"show_text":0,
"created_at":"2019-12-09 10:29:27",
"updated_at":"2019-12-10 08:20:50",
"pivot":{ },
"response_type":{
"id":1,
"type":"Texto"
},
"survey_question_option":[
],
"answer":[
{
"id":1,
"survey_id":1,
"survey_question_id":1,
"user_id":2,
"answer":"muy bien",
"created_at":"2019-12-10 08:25:12",
"updated_at":"2019-12-10 08:25:12"
},
{
"id":7,
"survey_id":1,
"survey_question_id":1,
"user_id":3,
"answer":"fd asdf asdfasddsaf",
"created_at":"2019-12-10 08:25:59",
"updated_at":"2019-12-10 08:25:59"
},
{
"id":13,
"survey_id":1,
"survey_question_id":1,
"user_id":4,
"answer":"lkklj i klike lakd aoiadlkj askfj askfjoaweij alkd aksdf asd",
"created_at":"2019-12-10 08:28:17",
"updated_at":"2019-12-10 08:28:17"
},
{
"id":19,
"survey_id":1,
"survey_question_id":1,
"user_id":5,
"answer":"l kdf jalskdf jalsdf afdsf afd ds lkdsjflak jaf",
"created_at":"2019-12-10 08:28:51",
"updated_at":"2019-12-10 08:28:51"
}
]
},
{
"id":2,
"question":"elija 3 opciones",
"user_id":1,
"survey_section_id":1,
"response_type_id":2,
"optional":0,
"num":3,
"rank":null,
"show_text":0,
"created_at":"2019-12-10 08:21:21",
"updated_at":"2019-12-10 08:21:21",
"pivot":{
"survey_id":1,
"survey_question_id":2
},
"response_type":{
"id":2,
"type":"Selecci\u00f3n M\u00faltiple"
},
"survey_question_option":[
{
"id":1,
"option":"opcion a",
"survey_question_id":2,
"created_at":null,
"updated_at":null
},
{
"id":2,
"option":"opcion b",
"survey_question_id":2,
"created_at":null,
"updated_at":null
},
{
"id":3,
"option":"opcion c",
"survey_question_id":2,
"created_at":null,
"updated_at":null
},
{
"id":4,
"option":"opcion d",
"survey_question_id":2,
"created_at":null,
"updated_at":null
}
],
"answer":[
{
"id":2,
"survey_id":1,
"survey_question_id":2,
"user_id":2,
"answer":"1",
"created_at":"2019-12-10 08:25:12",
"updated_at":"2019-12-10 08:25:12"
},
{
"id":8,
"survey_id":1,
"survey_question_id":2,
"user_id":3,
"answer":"3",
"created_at":"2019-12-10 08:25:59",
"updated_at":"2019-12-10 08:25:59"
},
{
"id":14,
"survey_id":1,
"survey_question_id":2,
"user_id":4,
"answer":"4",
"created_at":"2019-12-10 08:28:17",
"updated_at":"2019-12-10 08:28:17"
},
{
"id":20,
"survey_id":1,
"survey_question_id":2,
"user_id":5,
"answer":"4",
"created_at":"2019-12-10 08:28:51",
"updated_at":"2019-12-10 08:28:51"
}
]
},
{
"id":3,
"question":"bota la basura en los basureros?",
"user_id":1,
"survey_section_id":2,
"response_type_id":4,
"optional":1,
"num":null,
"rank":null,
"show_text":0,
"created_at":"2019-12-10 08:21:52",
"updated_at":"2019-12-10 08:21:52",
"pivot":{ },
"response_type":{
"id":4,
"type":"Si o No"
},
"survey_question_option":[
],
"answer":[
{
"id":4,
"survey_id":1,
"survey_question_id":3,
"user_id":2,
"answer":"No",
"created_at":"2019-12-10 08:25:12",
"updated_at":"2019-12-10 08:25:12"
},
{
"id":10,
"survey_id":1,
"survey_question_id":3,
"user_id":3,
"answer":"Si",
"created_at":"2019-12-10 08:25:59",
"updated_at":"2019-12-10 08:25:59"
},
{
"id":16,
"survey_id":1,
"survey_question_id":3,
"user_id":4,
"answer":"No",
"created_at":"2019-12-10 08:28:17",
"updated_at":"2019-12-10 08:28:17"
}
]
},
{
"id":4,
"question":"Que calificacion le daria a la limpieza general de la universidad?",
"user_id":1,
"survey_section_id":2,
"response_type_id":3,
"optional":0,
"num":null,
"rank":6,
"show_text":1,
"created_at":"2019-12-10 08:22:37",
"updated_at":"2019-12-10 08:22:37",
"pivot":{ },
"response_type":{
"id":3,
"type":"Rango"
},
"survey_question_option":[
],
"answer":[
{
"id":5,
"survey_id":1,
"survey_question_id":4,
"user_id":2,
"answer":"6",
"created_at":"2019-12-10 08:25:12",
"updated_at":"2019-12-10 08:25:12"
},
{
"id":11,
"survey_id":1,
"survey_question_id":4,
"user_id":3,
"answer":"6",
"created_at":"2019-12-10 08:25:59",
"updated_at":"2019-12-10 08:25:59"
},
{
"id":17,
"survey_id":1,
"survey_question_id":4,
"user_id":4,
"answer":"6",
"created_at":"2019-12-10 08:28:17",
"updated_at":"2019-12-10 08:28:17"
}
]
},
]
}
Пока это код, но у меня проблемы
$survey = Survey::with( 'surveyQuestions.responseType','surveyQuestions.surveyQuestionOption', 'surveyQuestions.answer')
->where('id', $id)->first();
$result = [];
foreach ($survey['surveyQuestions'] as $question) {
$options = [];
if (!in_array($question->response_type_id, [2, 3, 4])) {
continue;
}
foreach ($question['surveyQuestionOption'] as $option) {
$count = 0;
foreach ($survey['answer'] as $answer) {
// output 1 :dd(json_encode($answer));
if ($answer->survey_question_id === $option->survey_question_id) {
$count++;
}
}
}
$options[$option->id] = [
'title' => $option->option,
'vote_count' => $count
];
// output 2: dd(json_encode($options));
}
$result[$question->id] = [
'title' => $question->question,
'options' => $options
];
// output 3: dd(json_encode($result));
}
выходы
1:
"{"id":1,"survey_id":1,"survey_question_id":1,"user_id":2,"answer":"muy bien","created_at":"2019-12-10 08:25:12","updated_at":"2019-12-10 08:25:12"}"
2:
"{"4":{"title":"opcion d","vote_count":4}}"
3:
{"6":{"title":"jaksjakjf fjf a jaskj fkf ja range","options":{"4":{"title":"opcion d","vote_count":4}}}}"
Проблема в том, что только один тип вопроса имеет 'surveyQuestionOptions'
, который является множественным выбором,Также вывод неправильный, вывод 1 показывает неправильный ответ, он показывает первый ответ для типа вопроса: текст с response_type_id === 1. Я думал, что этот код пропущен по этому типу, если нет, я хотел бы исправить это всохраните текст ответов и двигайтесь дальше.
if (!in_array($question->response_type_id, [2, 3, 4])) {
continue;
}
У меня также сложилось впечатление, что в выводе массива $options
будут показаны все параметры, и он показывает только последний, в котором всего 4 параметра, то же самое с результатом, я думал, что он покажетМассив со всеми вопросами и массивом опций, который также принадлежит ему, и он показывает что-то полностью отключенное. этот вопрос, который он показывает, является вопросом ранжирования, и у него даже нет вариантов, ответ на вопрос ранга - это число от 1 до 6.
Я бы хотел сохранить вопросы примерно так:
TEXT
question
//all answers
YES OR NO
question
yes x amount of people
no x amount of people
RANKING (depending on stars set by question, could be between 3 - 6)
question
1 star x amount of people
2 star x amount of people
3 star x amount of people
MULTIPLE CHOICE (could be one entry in the db or more depending on the amount of options that can be selected)
question
option 1 x amount of people
option 2 x amount of people
option 3 x amount of people
option 4 x amount of people
x количество людей - это просто подсчет того, сколько ответов соответствует (исключая текстовый вопрос) или принадлежит определенному варианту множественного выбора.
На вопрос должно быть не более 4 ответов, некоторые вопросы не являются обязательными, поэтому человеку не нужно на него отвечать, но по большей части должно быть 4 ответа.
Я неВы уверены, как получить код, который у меня работает, чтобы правильно классифицировать и сохранить эти вопросы и ответы?
РЕДАКТИРОВАТЬ: текущий код, где текстовый вопрос и множественный выбор работают, как ожидалось
foreach ($survey['surveyQuestions'] as $question) {
$options = [];
if ($question->response_type_id === 1) {
foreach ($survey['answer'] as $answer) {
if ($answer->survey_question_id === $question->id) {
$options[$answer->id] = [
'title' => $answer->answer,
'vote_count' => null
];
}
}
}
if ($question->response_type_id === 2) {
foreach ($question['surveyQuestionOption'] as $option) {
$count = 0;
foreach ($survey['answer'] as $answer) {
if ($answer->survey_question_id === $option->survey_question_id
&& (int)$answer->answer === $option->id) {
$count++;
}
$options[$option->id] = [
'title' => $option->option,
'vote_count' => $count
];
}
}
}
Однако теперь я пришел к выводу, что ранг и даили никакие вопросы не придется делать по-другому, потому что я не уверен, как сравнивать варианты, которые не существуют, потому что у этих вопросов нет вариантов, у ранга просто есть переменная в самом вопросе, называемая ранжированием сколичество звезд в вопросе, и да или нет, я тоже не знаю, как их сравнить.
Есть предложения?