【问题标题】:how to sum times in where dates are same in laravel如何在laravel中对日期相同的时间求和
【发布时间】:2018-07-13 16:10:35
【问题描述】:

我正在尝试构建一个时间跟踪器,其中有一个“time_tracks”表。员工可以在一天内多次跟踪时间。现在我想总结'track_date'相同的'total_time'。请有人帮我找出预期的结果!下面是我的“trackForToday”功能-

public function trackForToday()
{
    $user_id = Auth::user()->id;

    $last_date = TimeTrack::where('employee_id', $user_id)->select('track_date')->orderBy('track_date', 'DESC')->first();
    $last_work_time = TimeTrack::where('employee_id', $user_id)->where('track_date', $last_date->track_date)->get();

    return view('employee.time-tracker.today');
}

这是我的“time_tracks”表——

【问题讨论】:

  • 你应该考虑以秒为单位的total_time,然后你可以很容易地使用sum()来得到总数
  • total_time 列的类型是什么?
  • 我会将日期和时间存储为单个实体。如果 Ann 员工的工作时间超过午夜,那么您可以决定如何分配这些时间。

标签: php mysql sql laravel laravel-eloquent


【解决方案1】:

使用sum() 收集方法,并且由于您使用time type 作为列类型(似乎),您可能需要在对其求和之前将其convert 秒。

$total_time = TimeTrack::where('employee_id', $user_id)->where('track_date', $last_date->track_date)->sum(DB::raw("TIME_TO_SEC(total_time)"));

获取特定曲目日期的数据-

$track_date = '2018-03-01';
$total_time = TimeTrack::where('track_date', $track_date)->sum(DB::raw("TIME_TO_SEC(total_time)"));

最后到show它,你需要convert回到time format,见this链接。

sum 方法返回集合中所有项目的总和。如果集合包含nested 数组或对象,您应该使用pass a key 来确定要求和的值。

【讨论】:

  • 对于 '2018-03-01' 我应该在查询中写什么?
  • 这是曲目日期吗??
  • 是的,这是跟踪日期。您只回答了 last_date ,我还想对任何日期的 total_time 求和。
  • 我的“track_date”日期可能不同。 'track_date' 是员工从前端输入的,所以我无法确定日期。
  • 只需将跟踪日期更改为您输入的日期,例如$request->input('track_date')
猜你喜欢
  • 2019-01-03
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 2023-03-06
  • 1970-01-01
  • 2021-04-12
  • 2015-05-12
相关资源
最近更新 更多