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
如果用户编辑了日程表呢?日程表记录将被编辑。所有日期记录也将被编辑。您不希望删除和重新创建日期,因为您可能会将每个记录用于另一个模型(例如,用户可能希望将其他用户标记为事件的每个日期的参与者)。
我希望这对你有帮助。祝你的项目顺利!