【问题标题】:How to correctly store in the answers table?如何正确存储在答案表中?
【发布时间】:2019-01-24 18:16:31
【问题描述】:

参与者数组有这样的结构:

array:1 [▼
  "participant" => array:2 [▼
    1 => array:5 [▼
      "name" => "John"
      "surname" => "W"
      "answer" => array:6 [▼
        0 => "text answer"
        1 => "long answer"
        2 => "check1"
        3 => "rb1"
        4 => "selectmenu1"
        5 => "img.jpg"
      ]
      "question_id" => array:6 [▼
        0 => "1"
        1 => "2"
        2 => "3"
        3 => "4"
        4 => "5"
        5 => "6"
      ]
      "rtypes" => "1"
    ]
    2 => array:3 [▼
      "name" => "Jake"
      "surname" => "K"
      "rtypes" => "4"
    ]
  ]
]

数组的每个索引都包含有关在会议中注册的参与者的数据。在这种情况下,数组索引“1”中的参与者的名字是“John”,姓氏“w”,并且正在注册类型为 id “1”。此注册类型有 6 个与之关联的自定义问题,因此在注册表单中,用户正在对此自定义问题进行注册回答,并且答案存储在“answer”数组中。

数组索引“2”中的参与者没有答案,因为他正在注册 id 为 4 的注册类型,这个 id 为 4 的注册类型没有关联任何自定义问题,所以在注册表中,只有收集了该参与者的姓名,没有该参与者的答案。

疑问:如何将每个参与者的答案存储在答案表中

现在我想将每个参与者的信息存储在参与者表中,并将每个参与者的答案存储在答案表中。存储在参与者表中的代码工作正常。

但是存储每个答案是行不通的,因为 answer 和 question_id 是数组。您知道如何在答案表中正确存储每个答案和 question_id 吗?

foreach ($participants['participant'] as $k => $participant) {
    $name = $participant['name'];
    $surname = $participant['surname'];

    $participant_result = Participant::create([
        'name' => $name,
        'surname' => $surname,
        'registration_id' => $registration->id,
        'registration_type_id' => $participant['rtypes']
    ]);

    //var_dump($participant['question_id']);
    // the error is here
    // store each answer of each participant that has answers
    if (isset($participant['question_id'])) {
        $answer = Answer::create([
            'question_id' => $participant['question_id'],
            'participant_id' => $participant_result->id,
            'answer' => $participant['answer'],
        ]);
    }
}

【问题讨论】:

  • 尝试创建一个你知道是数组的虚拟变量,然后将其传入以检查它不是别的东西。然而,在未来,您最好还是使用 PHP 对象,它使这样的工作变得更加简单。 php.net/manual/en/language.types.object.php
  • 不需要加六个答案吗?
  • 是的,必须在 answers 数组中插入每个答案。

标签: php


【解决方案1】:

我认为您需要为每个答案创建一个答案。我只是在您的代码中添加了一个循环和一些数组索引。

if (isset($participant['question_id'])) {
  for ($i=0; $i < count($participant["question_id"]); $i++) {
    $answer = Answer::create([
        'question_id' => $participant['question_id'][$i],
        'participant_id' => $participant_result->id,
        'answer' => $participant['answer'][$i]
    ]);
  }
}

【讨论】:

  • 谢谢,就像答案表中没有正确存储一样,我更新了问题以显示问题。
  • 此代码将为每个答案创建一个数据库行。我不同意将六个答案塞进一行,因为它违反了1NF,并且会使基于这些数据的查询变得极其困难。
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
相关资源
最近更新 更多