我想强制同一个用户发布的两篇文章之间有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;
}
我在创建新文章之前使用此功能进行检查。有没有更好的方法来做到这一点。
答案 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;
}