Laravel: преобразовать многомерный массив в коллекцию - PullRequest
0 голосов
/ 12 февраля 2019

В моем проекте у меня есть динамическая форма следующей структуры:

- Date 1
  - Shift 1
    - Area 1
      - Cell 1
      - Cell 2
    - Area 2
      - Cell 3
      - Cell 4
  - Shift 2
    - Area 1
      - Cell 1
  ...

Я беру данные из входных данных со следующим многомерным массивом: data [index] [column], где столбец может быть:дата, смещение, область, ячейка или содержимое ячейки.

Затем мне нужно сохранить эту форму в базе данных, чтобы иметь возможность ее воссоздать позже.Это легко, потому что мой массив имеет табличную форму:

index | Date  | Shift | Area | Cell | Cell Content
1       05.06   1       1       1         100
2       05.06   1       1       2         99
3       05.06   1       2       3         55
4       05.06   1       2       4         66
5       05.06   2       1       1         35

Но когда воссоздать форму (забрать ее из базы данных), было бы лучше преобразовать этот массив в коллекцию, чтобы иметь возможностьсделать следующее foreach:

foreach (dates as date)
  foreach (date->shifts as shift)
    foreach (shift->areas as area)
      foreach (area->cells as cell)
         echo cell->content
      endforeach
    endforeach
  endforeach
endforeach

Возможно ли это в Laravel?Или мне нужно использовать старый метод: сравнить текущий элемент с прецедентом и разорвать для, когда отличается?

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема, которую я вижу здесь, состоит в том, что все столбцы хранятся в одной таблице, т.е. у вас есть денормализованная структура.Простым решением было бы нормализовать ваши данные (может потребовать затрат), а затем определить отношения было бы очень просто в Laravel.

Поэтому я предлагаю вам разбить вашу единственную таблицу на:

  • даты (id, дата)
  • сдвиги (id, date_id, shift)
  • области (id, shift_id, area)
  • ячейки (id, area_id, ячейка)

Теперь вы также можете выбрать избыточные данные и добавить shift_id и date_id в таблицу ячеек.Если вам не нужно экономить место, возможно, храните данные обоими способами.

Подробнее о нормализации https://www.geeksforgeeks.org/database-normalization-normal-forms/

...