CakePHP - дата (даты) и время (ы) события - как структурировать - PullRequest
0 голосов
/ 28 апреля 2011

TLDR: Необходимо понять, как наилучшим образом пользователь может добавить дату (ы) и время (я) для события, и как структурировать базу данных


Объяснение: Когда пользователь добавляет событие, он должен иметь возможность выбрать дату события, независимо от того, будет ли оно повторяться ежедневно / еженедельно / ежемесячно, время начала и окончания событияили "весь день", если это только будни или выходные ... и т. д.В основном все, что вы можете сделать с календарем Google, когда создаете событие, и они также должны иметь возможность редактировать его (если это имеет значение).Но ТАКЖЕ, им нужно иметь возможность добавить другую дату / время, например:

Добавить событие, где в понедельник и среду этой недели и через три недели оно начинается с 8-10 вечера.Только во вторник и четверг на этой неделе с 6 до 9 вечера.


Мои мысли на данный момент:

Создайте таблицу «даты» с HABTMотношения с моей таблицей "событий".Когда пользователь добавляет дату (со всеми параметрами repeat..etc и т. Д., Он запускает функцию для обработки этих повторов / пределов ... и т. Д. И добавляет все даты в таблицу дат с их временем начала / окончания.

Но - тогда как мне это сделать, если они хотят отредактировать это - поскольку он только что создал несколько полей.


Вопрос / Помощь?:

Я даже на правильном пути с этим? Я новичок в CakePHP, и мне трудно обдумать лучшие способы сделать что-то ... Я пока не ищу технической помощи (не отказался бы от этого, хотя) - на данный момент, мне просто нужно понять, как лучше структурировать все, чтобы справиться с этим. Может быть, мне нужна таблица «дат» И таблица «времен»?таблица дат с идентификатором, который ссылается на множество отдельных строк в таблице дат_данных?

Большое спасибо заранее за любую помощь / направление!

1 Ответ

2 голосов
/ 28 апреля 2011

У тебя все отлично.Позвольте мне поделиться своими мыслями.

Если бы я спроектировал это, у меня было бы 3 модели:

Событие

  • id
  • user_id
  • описание
  • создано (дата-время)
  • обновлено (дата-время)

Расписание

  • id
  • event_id
  • описание
  • start (datetime)
  • end (datetime)
  • duration (time, если пусто (NULL), это означает, что этособытие целого дня)
  • repeat_time (например, 15:00 означает 15:00 ежедневно)
  • repeat_day (для недели / месяца, например, понедельник, понедельник и вторник, с понедельника по пятницу)
  • repeat_date (для месяца, например, 1 означает каждый 1-й день месяца, 31 означает каждый 31-й или конец месяца)
  • repeat_anniversary (для конкретной даты каждый год, например, каждый 25 декабря)

Дата

  • id
  • schedule_id
  • start (datetime)
  • end (datetime)

Теперь давайте рассмотрим пример события.Допустим, мы хотим, чтобы событие повторялось каждую субботу и воскресенье мая и июня 2011 года с 13:00 до 15:00 (два часа):

Таблица событий содержит основные сведения о событии.Одна запись будет сохранена здесь.

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

  • длительность: 02: 00
  • начало: 2011-05-01
  • конец: 2011-06-30
  • repeat_time: 13: 00: 00
  • repeat_day: 01,07 (воскресенье и суббота)

Теперь в таблице дат будет 17записи, по одному на каждое вхождение графика.Причина, по которой я расстался, заключается в том, что мне будет легче знать, когда произойдет событие.Это будет полезно, например, при создании календаря.Одна из записей таблицы дат будет выглядеть следующим образом:

  • начало: 2011-05-01 13: 00: 00
  • конец: 2011-05-01 15:00: 00

Что теперь, если пользователь редактирует расписание?Запись по расписанию будет отредактирована.Все даты записи также будут отредактированы.Вы не хотите удалять и воссоздавать даты, поскольку вы можете использовать каждую запись для другой модели (например, пользователь может захотеть пометить других пользователей в качестве участников для каждой даты события).

Надеюсь, это поможет.Удачи в вашем проекте!

...