强制两篇文章之间的1分钟差距

时间:2017-09-01 05:16:16

标签: php laravel laravel-5

我想强制同一个用户发布的两篇文章之间有1分钟的差距。这是为了防止意外双重发布,并希望减少垃圾邮件。

现在我在User模型中执行此操作

public function canPostNewArticle()
{
    $article = Article::where('user_id', $this->id)->latest()->first();
    if ($article == null)
    {
        return true;
    }
    $date = $article->created_at->timestamp;
    $currentTime = Carbon::now()->timestamp;

    $diff = ($currentTime - $date) / 60;
    return $diff > 1;
}

我在创建新文章之前使用此功能进行检查。有没有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

在我看来,另一个更简单且看起来更好的解决方案是在数据库调用中添加一个where子句,而不是获得第一个得到计数(后来创建的数量,然后是时间戳),如果高于1则然后你知道用户在过去一小时内创建了一篇文章。

$oneHourAgo = strtotime() - 3600;
$oneHourAgoTimestamp = date('dd-mm-yyyy hh:mi:ss', $oneHourAgo);

return Article::where('user_id', $this->id)->andWhere('created_at', '>', oneHourAgoTimestamp)->count() == 0;

如果我的第二个变量“oneHourAgoTimestamp”具有正确的格式,我不是100%,但可以轻松修改。

答案 1 :(得分:1)

您只需使用以下查询来确定用户是否在一分钟内发布了文章。

public function canPostNewArticle()
{
    return Article::where('user_id', $this->id)
        ->where('created_at', '>=', Carbon::now()->subMinute())
        ->count() == 0;
}