CakePHP -事件's日期&时间-如何组织


CakePHP - event's date(s) & time(s) - how to structure

TLDR:需要了解用户能够添加日期的最佳方式&事件发生的时间,以及如何构建数据库


解释:当用户添加一个事件时,他们需要能够选择事件的日期,是否会每天/每周/每月重复,事件的开始和结束时间或"全天",如果只是工作日或周末……基本上,当你创建一个事件时,你可以用谷歌日历做任何事情,他们也需要能够编辑它(如果这很重要的话)。但是,他们也需要能够添加另一个日期/时间-例如:

添加一个事件,在本周的周一和周三以及从现在起的三周内,从晚上8点到10点。这周只有星期二和星期四,从晚上6点到9点。


我的想法:

创建一个带有HABTM关系的"日期"表和我的"事件"表。当用户添加一个日期(包含所有重复选项)时,它会运行一个函数来处理这些重复/限制…等等,并将所有日期添加到日期表中,包括开始/结束时间。

但是-如果他们想要编辑它,那么我如何管理它-因为它刚刚创建了多个字段。


问题/帮助?:

我的思路对吗?我是CakePHP的新手,对我来说很难理解做事情的最佳方法……我还没有寻求技术帮助(虽然不会拒绝它)-现在,我只需要得到最好的方式来组织一切能够管理这一点的想法。也许我需要一个"日期"表和一个"时间"表?也许是一个"日期"表,其id引用了"dates_data"表中的许多单独行?

非常感谢您的任何帮助/指导!

你做得很好。让我来分享一下我的想法。

如果我设计这个,我会有3个模型:

事件
  • id
  • user_id
  • 创建(datetime)
  • 更新(datetime)

  • id
  • event_id
  • start (datetime)
  • 结束(datetime)
  • 持续时间(时间,如果为空(NULL)则表示这是一整天的事件)
  • repeat_time(例如:3:00pm意味着每天下午3点)
  • repeat_day(对于每周/每月,例如Monday, Monday &;星期二、星期一至星期五)
  • repeat_date(对于每月,例如1表示每个月的第一天,31表示每个月的31号或月底)
  • repeat_anniversary(每年特定日期,例如每年12月25日)

日期
  • id
  • schedule_id
  • start (datetime)
  • 结束(datetime)

现在让我们看一个事件的例子。假设我们想要一个在五月的每周六和周日重复的活动。2011年6月下午1时至3时(两小时):

事件表包含事件的基本细节。这里将保存一条记录。

schedule表是分开的,因此您可以添加多个schedule。一条记录也将在schedule中保存,包含以下字段:

  • :持续时间02:00
  • 开始:2011-05-01
  • 结束 : 2011-06-30
  • repeat_time: 13:00:00
  • repeat_day: 01:07 (Sunday &星期六)

现在,在日期表中,将有17条记录,每条记录表示计划的发生。我把这个分开的原因是,这样我就更容易知道事件什么时候会发生。这将非常有用,例如,在创建日历时。日期表的其中一条记录如下所示:

  • start: 2011-05-01 13:00:00
  • end: 2011-05-01 15:00:00

如果用户编辑了日程表呢?日程表记录将被编辑。所有日期记录也将被编辑。您不希望删除和重新创建日期,因为您可能会将每个记录用于另一个模型(例如,用户可能希望将其他用户标记为事件的每个日期的参与者)。

我希望这对你有帮助。祝你的项目顺利!