【问题标题】:Laravel/Eloquent - 15 Second Interval between timestampLaravel/Eloquent - 时间戳之间的 15 秒间隔
【发布时间】:2013-06-20 18:31:34
【问题描述】:

试图防止用户过快发布 cmets,因此计划使用 15 秒的间隔。

此查询无法查看是否在过去 15 秒内发表了评论。我做错了什么?

表:

 id  |      comment    |     created_at      |
==============================================
 2   |   blah casd     | 2013-06-20 18:14:17 |

但是,我无法让它与 Eloquent 一起使用

    //are they commenting too fast?
    $protection = DB::table('comments')
       ->where('user_id', '=', $userid)
       ->where('created_at', '<', '(NOW(), INTERVAL 15 SECOND)')
       ->get();

    if(!empty($protection)) {
         return Redirect::back()->with_message('Please wait 15 seconds between comments.', 'error'); 
    }

【问题讨论】:

  • 如果你使用的是 Laravel 4,那么我建议你使用 Carbon。只需将 Provider 以及 app/config/app.php 中的别名添加到列表中。更多关于碳的信息:github.com/briannesbitt/Carbon
  • 不幸的是我正在使用 L3

标签: php mysql laravel eloquent


【解决方案1】:

尝试替换

->where('created_at', '<', '(NOW(), INTERVAL 15 SECOND)')

->where('created_at', '<', DB::raw('NOW() + INTERVAL 15 SECOND)')

我希望这能有所帮助。

【讨论】:

  • 这对我不起作用。但这样做: where('last_update', '
  • 这只适用于 MySQL 驱动。对于 SQLite,您必须使用 datetime 函数,请参阅 corresponding SO thread
  • 仅供参考,我认为这里存在语法问题,最后一个撇号应该移到左边一个字符。 -&gt;where('created_at', '&lt;', DB::raw('NOW() + INTERVAL 15 SECOND'))
【解决方案2】:

逗号不正确。您应该添加间隔:

NOW() + INTERVAL 15 SECOND

或者减去,如果你把它改成&gt;比较...

【讨论】:

  • 嘿,我试过了,它仍然不能正常工作。会不会是时间戳不同的问题?
猜你喜欢
  • 2019-03-14
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多