2016-03-27 2 views
1

Для простых у меня есть поле (timestamp) started_at, (int) duration и у меня есть строки с идентификаторами [1, 2, 3]. Когда я удаляю первый объект, я хочу обновить поле started_at во всех следующих строках (в моем примере это строки 2 и 3).Обновление нескольких временных штампов Laravel ORM Eloquent

Я пытался сделать что-то вроде этого:

Model::where('id', '>', $myObject->id) 
    ->update([ 
     'started_at' => DB::raw('started_at - ' . $myObject->duration), 
    ]); 

Но эта конструкция устанавливается мои поля 0000-00-00 00:00:00. Как я могу это исправить?

ответ

1

Я думаю, что проблема с синтаксисом SQL - вы не можете вычитать периоды, как, что - вы должны использовать DATE_SUB function или ИНТЕРВАЛ ключевое слово (для MySQL)

UPDATE: Можно также сохранять метки времени в этом столбце как простое число. В этом случае будут выполняться арифметические операции.

+0

Я знаю о 'UNIX_TIMESTAMP()' или что-то в этом роде в MySQL, но я хочу найти глобальное решение для своей проблемы;) – ventaquil

+0

Фактически это может быть хорошим вариантом, если вы хотите легко добавлять/вычитать интервалы без использования Функции, специфичные для РСУБД. Создайте временную метку в PHP, сохраните ее, а затем вы сможете выполнять с ней математические операции. –

+0

Я мог хранить данные в переменных PHP, но для многих данных у меня много обновлений :( – ventaquil

Смежные вопросы