2015-04-02 4 views
1

У меня есть небольшая проблема ... Поэтому у меня есть код, который получает все значения из таблицы,Laravel удалить или обновление не работает

Я хочу удалить или обновить значения в таблице, когда calumn 'expire' меньше, чем функция time().

Я живу в UTC +1 часовой пояс, но хорошо ...

Я хочу обновить в первую очередь таблицы «deleted_at», чтобы получить все данные по-прежнему в базе данных.

Так как я могу это сделать,

Если я сделать запрос на удаление:

$del = DB::table('event')->where('expire', '<', $time)->delete(); 

Это не работает ...

Пожалуйста, помогите мне (возможно, путем принуждения UPDATE запрос на обновление таблицы deleted_at до текущей отметки времени?

Спасибо за помощь!

ответ

2

Проблема, вероятно, в том, что time() возвращает секунды, прошедшие с 1970 года, а не временную метку. (Который я предполагаю, что ваша колонка дб)

Я предлагаю вам использовать Carbon (библиотека даты Laravel использует)

$now = Carbon::now(); 
$del = DB::table('event')->where('expired', '<', $now)->delete(); 

Или для мягкого удаления:

$now = Carbon::now(); 
$del = DB::table('event')->where('expired', '<', $now)->whereNull('deleted_at')->update(['deleted_at' => $now]); 
+0

Это работает, но моя таблица продолжает обновляться, поэтому я хочу добавить параметр, который говорит: Если таблица deleted_at по-прежнему NULL, то они могут обновляться, в противном случае нет .... Так что теперь у меня есть это: $ del = DB :: table ('event') -> где ('expire', '<', $time)-> update ([' deleted_at '=> $ time]); – Robin

1

Благодаря lukasgeiter я нашел правильное решение, это решение:

$del = DB::table('event')->where('expire', '<', $time)->where('deleted_at', 'IS NULL')->update(['deleted_at' => $time]); 

Переменная- это функция time();, потому что я хочу получить временную метку, а не формат даты.

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