2013-06-20 4 views
1

Пытается предотвратить публикацию комментариев слишком быстро, поэтому использование 15-секундного интервала - это план.Laravel/Eloquent - 15 Second Interval между timestamp

Этот запрос не работает, если посмотреть, был ли комментарий за последние 15 секунд. Что я делаю не так?

Таблица:

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

Однако я совсем не могу получить его на работу с красноречивы

//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'); 
    } 
+0

Если вы используете Laravel 4, я предлагаю вам использовать Carbon. Просто добавьте Поставщика в список, а также псевдоним в 'app/config/app.php'. Подробнее о Carbon здесь: https://github.com/briannesbitt/Carbon –

+0

К сожалению, я работаю с L3 – cantaffordretail

ответ

10

Попробуйте заменить

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

с

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

I надеюсь, что это может помочь.

+1

Это не работало для меня. но это делает: где ('last_update', '<', DB :: raw ('DATE_SUB (NOW(), INTERVAL 7 DAY)')) – Kozmk12

+0

Это работает только с использованием драйвера MySQL. Для SQLite вы должны использовать функцию 'datetime', см. [Соответствующий поток SO] (http://stackoverflow.com/a/7547245/570503). – tomasbedrich

3

Запятая неверен. Вы должны быть ДОБАВЛЕНИЕ интервал:

NOW() + INTERVAL 15 SECOND 

или вычитая, если вы измените его на > сравнения ...

+0

Эй, я пробовал это, и он все еще работает неправильно. Это может быть проблема с разными отметками времени? – cantaffordretail