Как сохранить переключаемую продолжительность в базе данных

Я хочу дать пользователям моего приложения Laravel возможность отслеживать время, которое они тратят на разные задачи. Нажав кнопку «Пуск», я хочу создать новый экземпляр объекта «отслеживания», который имеет идентификатор и ссылку на задачу, время которой он отслеживает в качестве внешнего ключа. Кроме того, я хочу сохранить метку времени со второй секунды, когда она была создана. Позже пользователь должен остановить отслеживание еще одним нажатием кнопки. Мне нужно как-то хранить продолжительность трекинга, потому что я хочу отдавать отчеты о том, какая задача имела сколько трекингов, какое общее время всех суммировалось и т.д. остановить, как только отслеживание будет остановлено, и сохранить его в объект. Однако я хочу, чтобы пользователь мог продолжить отслеживание позже, чтобы он снова начал подсчет. Если бы я снова установил временную метку на окончание, она рассчитала бы всю продолжительность, даже если бы ее можно было отключить между ними.

Другая идея состояла в том, чтобы иметь столбцы last_started и total_duration. Когда пользователь (повторно) запускает отслеживание, включается отметка времени. Как только он его закрывает, продолжительность добавляется к текущей total_duration, а last_started снова устанавливается в нуль. Это похоже на грязный обходной путь, и я уверен, что есть лучшие варианты, о которых я хотел бы услышать.

Заранее спасибо!


person Rufrage    schedule 30.01.2018    source источник


Ответы (1)


Ваш вопрос для меня немного расплывчатый, но, если я правильно понимаю, вам просто нужна ОДНА запись отслеживания для каждой задачи для каждого пользователя. Я не понимаю, почему вы не можете сделать это немного проще.

Создайте модель TaskTimeTrack с

  • ID пользователя
  • идентификатор_задачи
  • время начала
  • время окончания

то в вашем контроллере у вас, вероятно, должен быть метод start и stop

В вашем методе start проверьте, есть ли у вас запись TaskTimeTrack для пользователя, а задача и время окончания IS NULL; если это так, он не сможет начать новое отслеживание, так как он все еще находится в активном отслеживании; просто верните существующий TaskTimeTrack (если вы хотите что-то вернуть). Если вы не найдете такой записи, просто создайте новую.

В вашем методе stop просто найдите TaskTimeTRack для пользователя и задачи, где время окончания IS NULL, и обновите время окончания до СЕЙЧАС.

нет причин, по которым вы хотели бы ограничить только 1 запись для каждого пользователя/задачи. Вы просто вычисляете общее время по сумме (конечное время - время начала) всех TaskTimeTRack для конкретного пользователя или задачи или их комбинации.

person David Heremans    schedule 30.01.2018