【发布时间】:2017-11-24 11:03:14
【问题描述】:
我正在尝试计算两个日期时间之间的差异。
我有两个模型,tasks 和 task_interactions,它们之间的关系是这样的:tasks 有很多 task_interactions,task_interactions 属于 tasks。
用户可以将任务的状态更改为以下状态之一:“进行中”、“暂停”和已完成。用户在“进行中”和“暂停”之间多次更改状态,但一旦完成,用户就无法再更改任务状态。
所有交互都保存在task_interactions 表中,created_by 作为 user_id,created_at 作为日期时间。该表有这些列:id ; task_id ; status ; comments ; created_by ; created_at。
这是任务 id = 1 的示例:
# id, task_id, status, comments, created_by, created_at
144, 1, In Progress, , 1, 2017-11-14 09:42:20
145, 1, Paused, , 1, 2017-11-14 09:45:53
146, 1, In Progress, , 1, 2017-11-14 09:46:57
147, 1, Paused, , 1, 2017-11-14 09:49:57
148, 1, In Progress, , 1, 2017-11-14 10:00:10
149, 1, Paused, , 1, 2017-11-14 10:06:25
150, 1, In Progress, , 1, 2017-11-14 10:07:26
151, 1, Paused, , 1, 2017-11-14 10:08:11
153, 1, Paused, , 1, 2017-11-14 11:27:04
154, 1, In Progress, , 1, 2017-11-14 11:27:21
155, 1, Paused, , 1, 2017-11-14 11:57:38
问题是,对于我来说,要获得一项任务所花费的总时间,我必须确定 In Progress 和 Paused 之间的时间。 Paused 和 In Progress 之间的时间不相关。
我正在为此苦苦挣扎。有没有人可以帮助我?
提前致谢。
还有一件事,我不是很有经验,所以如果我的问题听起来有点愚蠢,请原谅,我相信我应该在 task_id = X 的所有 task_interactions 中做一个@foreach 循环,这就是我所知道的。
按照要求,这是我为视图传递的数据:
public function mytasks()
{
$users = User::all();
$mytasks = Task::where('assigned_to','=', Auth::id())->where('status','!=','Finished')->get();
$mytaskscount = Task::where('assigned_to','=', Auth::id())->count();
$tasksinprogress = Task::where('status','=','In Progress')->where('assigned_to','=', Auth::id())->get();
$tasksinprogresscount = Task::where('status','=','In Progress')->where('assigned_to','=', Auth::id())->count();
$taskspaused = Task::where('status','=','Paused')->where('assigned_to','=', Auth::id())->get();
$taskspausedcount = Task::where('status','=','Paused')->where('assigned_to','=', Auth::id())->count();
$tasksfinished = Task::where('status','=','Finished')->where('assigned_to','=', Auth::id())->get();
$tasksfinishedcount = Task::where('status','=','Finished')->where('assigned_to','=', Auth::id())->count();
$tasktypes = Tasktype::all();
$chapters = Chapter::all();
return view('pages.tasks_my', compact('mytasks','tasktypes','chapters','tasksinprogress','taskspaused','tasksfinished','mytaskscount','tasksinprogresscount','taskspausedcount','tasksfinishedcount'));
}
还有一件事,我目前所知道的
@foreach ($tasks as $task)
@foreach ($task->interactions as $interactions)
{{ In here, every time my loop returns a status = "In progress" i should mark that time, and if that the next loop returns a "Paused", i should count the difference between these two. And sum all other equal cases in the loop. }}
@endforeach
@endforeach
我真的不知道该怎么做
【问题讨论】:
-
你能推动你的控制器吗?
-
我也想知道这个问题的答案
-
您是否亲自负责让 db 查询来处理这个问题?想到的是通过 php 迭代结果。
标签: laravel php-carbon