Как хранить данные из динамически добавляемых строк с несколькими входами - PullRequest
0 голосов
/ 24 сентября 2018

Я создал форму, содержащую информацию о пользователе (врачах).Помимо информации по умолчанию, теперь они хотят добавить часы работы из своего офиса.

В текущей форме я добавил группу форм с 3 элементами ввода:

  • select name = "dayofweek [] "
  • input name =" timeblock [] "
  • select name =" type [] "

Для пользователя есть кнопка для добавлениядополнительная строка с теми же полями, чтобы он мог создать несколько часов работы (в день / временной блок).Все сохраняется с помощью кнопки отправки из формы.

После сохранения мои данные выглядят так:

  • "dayofweek" => ["monday", "monday", "вторник ", ...]
  • " timeblock "=> [" 10-12h "," 14-18h "," 10-16u ", ...]
  • " type "=> ["по записи", "бесплатно", "бесплатно", ...]

Теперь я хочу сохранить их в своей таблице с полями [ID, DayOfWeek, TimeBlock, Type].Для этого мне нужно изменить порядок данных, полученных из формы отправки, прежде чем я смогу сохранять их построчно.Вот как я это делаю сейчас:

public static function prepareData($dayofweek = [], $timeblock = [], $type = []) {

    $prepared = [];
    $i = 0;

    while($i < count($dayofweek)) {

        $a = $dayofweek[$i];
        $b = $timeblock[$i];
        $c = $type[$i];

        $record = ['dayofweek' => $a, 'timeblock' => $b, 'type' => $c];
        array_push($prepared, $record);

        $i++;
    }

    return $prepared;
}

Чтобы показать данные на форме при редактировании, я должен сделать обратное.Мне было интересно, есть ли другой способ сделать это проще и чище?

1 Ответ

0 голосов
/ 24 сентября 2018

К сожалению, собственный тип данных, такой как массив и строка, может иметь только один формат и структуру.Если в вашем сценарии использования используются одни и те же данные в разных форматах или в другой структуре данных, рекомендуется создать объект данных.Объект данных - это объект, который хранит данные в своих полях и имеет множество входных и выходных методов, позволяющих использовать данные в различных форматах и ​​структурах.

Это ООП-подход, в этом случае он сделает ваш код намного чище и понятнее, а в будущем его будет легче расширять или изменять.Но учтите, что это не уменьшит объем кода.В любом случае требуется функция преобразования формата.

Согласно описанию, у нас есть объект данных с именем Appointment с данными {DayOfWeek, TimeBlock, Type}.Однако функции ввода и вывода, которые описаны со ссылкой на список назначений, следовательно, эти функции не принадлежат объекту назначения.Они ссылаются на другой объект данных, AppointmentList, который содержит массив назначений и функций ввода и вывода.

Этот объект будет выглядеть следующим образом:

class Appointment
{
    public $dayofweek;
    public $timeblock;
    public $type;

    public function __construct($record)
    {
        $this->dayofweek = $record['dayofweek'];
        $this->timeblock = $record['timeblock'];
        $this->type = $record['type'];
    }
}

class AppointmentList
{
    public $appointmentArray = [];

    function setData($data)
    {
        $prepared = [];
        $i = 0;

        while ($i < count($data['dayofweek'])) {

            $a = $data['dayofweek'][$i];
            $b = $data['timeblock'][$i];
            $c = $data['type'][$i];

            $record = ['dayofweek' => $a, 'timeblock' => $b, 'type' => $c];
            $prepared[] = new Appointment($record);
            $i++;
        }
        $this->appointmentArray = $prepared;

    }

    function getData() {
        $data = ['dayofweek' => [],'timeblock' => [],'type' => []];
        foreach ($this->appointmentArray as $appointment){
            $data['dayofweek'][] = $appointment->dayofweek;
            $data['timeblock'][] = $appointment->timeblock;
            $data['type'][] = $appointment->type;
        }
        return $data;
    }
}

Тогда, когда вы получите $ data иззапуск формы:

$al = new AppointmentList();
$al->setData($data);

. Вы можете использовать массив $al->appointmentArray для доступа к встречам по одному и сохранения их в таблице.

И потом, когда вам нужно заполнить формуснова просто используйте $al->getData()

Обратите внимание, что это только пример.Обычно различные методы используются для автоматического сохранения объекта данных в таблице.

Надеюсь, это поможет.Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...