Laravel - Расчет общего времени для нескольких записей времени - PullRequest
0 голосов
/ 17 октября 2019

Я регистрирую записи времени пользователя. Моя миграция времени выглядит следующим образом:

  Schema::create('times', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->date('start_day');
            $table->text('category');
            $table->time('start_time');
            $table->time('finish_time');
            $table->time('duration');
            $table->text('notes');
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users');

        });
    }

Примечание: Duration вычисляет общую разницу между start_time и finish_time

Я группирую месяцы и категории вместе со следующим кодом:

   $data = $user->times()->whereYear('start_day', 2019)->get();
        $group_months = $data->groupBy(function($entry) {
            return $entry->category;
        })->map(function($items) {
            return $items->groupBy(function($entry) {
                return Carbon::parse($entry->start_day)->format('m');
            })
        ->map(function($items) {
            return $items->count();
            });
        });

Если я запускаю dd ($ group_months), я получаю это:

Collection {#322 ▼
  #items: array:1 [▼
    "Comp Time Used" => Collection {#318 ▼
      #items: array:1 [▼
        10 => 2
      ]
    }
  ]
}

Так что, как вы можете видеть, он группирует его по категории и месяцу и подсчитывает общее числозаписей.

Теперь я хочу получить общую продолжительность каждого месяца и соответствующую ему категорию.

Например, если мы ссылаемся на коллекцию выше, у меня есть: 2 ВремяЗаписи за октябрь в поле «Используемое время».

Допустим, длительность ввода времени 1 = 12:00:00 и продолжительность ввода времени 2 = 05: 00: 00

Я хочуОбщая продолжительность отображения: 17:00:00. Как я могу это сделать?

1 Ответ

0 голосов
/ 17 октября 2019

Я исправил и проверил свой предыдущий ответ.

$monthDurations = $user->times()
    ->whereYear('start_day', 2019)
    ->select(
        \DB::raw('TIME_FORMAT(SUM(TIME_TO_SEC(duration)), "%H:%i:%s") as `month_duration`'),
        \DB::raw('DATE_FORMAT(start_day, "%Y-%m") as `year_month`'),
        'category',
        'user_id'
    )
    ->groupBy(\DB::raw('DATE_FORMAT(start_day, "%Y-%m")'), 'category', 'user_id')
    ->get();
...