Удалить строку из базы данных после выполнения определенного условия в laravel

#laravel #laravel-5.2 #lumen #lumen-5.4

#laravel #laravel-5 #lumen #lumen-5.4

Вопрос:

В моей таблице есть данные id post_id description and dispose_time . Я хотел удалить данные из базы данных, если текущее время и дата больше текущего времени.

  $post = Post::delete()->where('dispose_time' > DATE_SUB(NOW())), INTERVAL 10 MINUTE));
  

что-то вроде этого. это выдает мне ошибку, и dispose_time в моей базе данных находится в формате метки времени примерно так 1555107000 .
Любая помощь приветствуется.

Ответ №1:

Наконец, используйте предложение delete, например:

 Post::where("dispose_time", ">", now()->addMinutes(-10)->toDateTimeString())->delete();
  

Комментарии:

1. выдает следующую ошибку: — Недопустимый формат даты и времени: 1292 Усеченное неверное значение даты и времени: ‘dispose_time’ (SQL: удалить posts откуда ‘dispose_time’> DATE_SUB(NOW(), ИНТЕРВАЛ 10 МИНУТ))

2. что теперь тоже относится

3. now() — это вспомогательная функция, возвращающая объект carbon, я отредактировал его снова

4. Вызов неопределенной функции App Http Controllers now()

Ответ №2:

Используйте углерод для времени в laravel.

 $post = Post::where('dispose_time', '>', Carbon::now())->delete();
  

Ответ №3:

Основываясь на предоставленной вами информации, вы должны использовать whereRaw метод, а не where , поскольку вы используете SQL в качестве предложения where. Кроме того, delete() должен быть вызван последний метод. Итак, ваш код будет следующим:

 Post::whereRaw("`dispose_time` > DATE_SUB(NOW(), INTERVAL 10 MINUTE)")->delete();
  

Поскольку вы используете Laravel, он поставляется с пакетом Carbon, и вы также можете выполнить следующие действия

 Post::whereDate('dispose_time', '>', CarbonCarbon::now()->addMinutes(-10))->delete();
  

Комментарии:

1. Недопустимый формат даты и времени: 1292 Усеченное неверное значение даты и времени: ‘dispose_time’ (SQL: удалить posts откуда ‘dispose_time’> DATE_SUB(NOW(), ИНТЕРВАЛ 10 МИНУТ))

2. Пожалуйста, попробуйте второй подход, который я только что представил.

3. я использую lumen и не знаю его определения, из какого пакета он поступает

4. Если это не выходит из поля с lumen, вы можете проверить это здесь . Кроме того, вы уверены dispose_time , что она настроена как временная метка?

5. Я беру дату и время в postman и применяю к нему функцию strtotime, а в БД это строка