如何在数据库中存储可切换的持续时间

时间:2018-01-30 19:27:30

标签: mysql laravel toggle time-tracking

我希望为我的Laravel应用程序的用户提供跟踪他们在不同任务上花费的时间的选项。点击"开始"按钮,我想创建一个"跟踪"的新实例。对象,具有id和对任务的引用,它跟踪作为外键的时间。此外,我想存储创建它的第二个时间戳。之后,用户应该通过另一个按钮点击停止跟踪。 我需要以某种方式存储跟踪的持续时间,因为我想报告什么任务有多少跟踪,所有总结的总时间是什么,等等。可以选择通过减去开始来计算持续时间。停止,一旦跟踪停止并将其保存到对象。 但是,我希望用户以后能够继续跟踪,以便再次开始计数。如果我将时间戳设置为再次结束,它将计算整个持续时间,即使它可能已在中间禁用。

另一个想法是拥有last_started和total_duration列。当用户(重新)开始跟踪时,包括时间戳。一旦他关闭它,持续时间就会被添加到当前的total_duration中,并且last_started会再次设置为null。这感觉就像一个肮脏的解决方法,我相信有更好的选择,我很乐意听到。

提前致谢!

1 个答案:

答案 0 :(得分:0)

你的问题对我来说有点模糊,但如果我理解正确,你只需要每个用户每个任务有一个跟踪记录。我不明白为什么你不能让它变得容易一些。

使用

创建一个模型TaskTimeTrack
  • USER_ID
  • TASK_ID
  • 开始时间
  • 结束时间

然后在你的控制器中,你应该有一个方法startstop

start方法中检查用户是否有TaskTimeTrack记录,任务和结束时间是否为空;如果是这样的话,他就不应该开始新的跟踪,因为他仍在积极跟踪;只返回现有的TaskTimeTrack(如果你想返回任何东西) 如果您没有找到这样的记录,那么只需创建一个新记录。

stop方法中,只搜索用户和任务的TaskTimeTRack,其中endtime为IS NULL,并将结束时间更新为NOW。

没有理由要限制每个用户/任务只有1条记录。您只需计算特定用户或任务或两者组合的所有TaskTimeTRack的总和(结束时间 - 开始时间)的总时间。