【问题标题】:Delete row from db after certain condition has been meet in laravel在laravel中满足某些条件后从db中删除行
【发布时间】:2019-09-02 18:27:39
【问题描述】:

我的表有数据id post_id description and dispose_time。如果当前时间和日期大于当前时间,我想从数据库中删除数据。

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

类似这样的东西。它给了我错误,我的数据库中的 dispose_time 是时间戳格式,类似于 1555107000 。 任何帮助表示赞赏。

【问题讨论】:

    标签: laravel laravel-5.2 lumen lumen-5.4


    【解决方案1】:

    最后使用delete子句,像这样:

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

    【讨论】:

    • 它给出了这个错误:- 无效的日期时间格式:1292 截断不正确的日期时间值:'dispose_time'(SQL:从posts 删除'dispose_time'> DATE_SUB(现在(),间隔10分钟) )
    • 现在也指什么
    • now() 是辅助函数,返回 carbon 对象,我又编辑了一遍
    • 调用未定义函数 App\Http\Controllers\now()
    【解决方案2】:

    在 laravel 中使用 Carbon 作为时间。

    $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', '>', Carbon\Carbon::now()->addMinutes(-10))->delete();
      

      【讨论】:

      • 无效的日期时间格式:1292 截断不正确的日期时间值:'dispose_time'(SQL:从posts 中删除'dispose_time' > DATE_SUB(NOW(),INTERVAL 10 MINUTE))
      • 请尝试我刚才介绍的第二种方法。
      • 我正在使用流明,我不知道它来自哪个包的定义
      • 如果它不是开箱即用的流明,您可以查看here。另外,您确定dispose_time 配置为时间戳吗?
      • 我在邮递员中获取日期和时间并将 strtotime 函数应用于它,在 DB 中它是字符串
      猜你喜欢
      • 2018-01-09
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 2021-10-17
      • 2018-03-02
      • 2020-12-22
      • 1970-01-01
      相关资源
      最近更新 更多