我有一个包含以下列的表。
- id (个人资料ID) int(10)
- viewer (访客ID) int(10)
- ip (访问者IP) int(10)
- ts (unix timestamp) int(10)
现在,我想询问访客x是否今天访问过个人资料。
我的想法是,我想做这样的事情。
public function hasVisitToday(Profile $profile)
{
$dt = Carbon::now();
if(ViewTrack::where('id', $profile)->where('viewer', $visitor)->whereDate('ts', $dt->today())->first())
return true;
return false;
}
该项目使用Laravel 5.1,其中一个主要问题是数据库将时间戳存储为int列中的“unix timestamp”而不是timestamp列。
我正在寻找处理此问题的最佳方法。
答案 0 :(得分:0)
if(ViewTrack::where('id', $profile)
->where('viewer', $visitor)
->where('ts', '>=', $dt->startOfDay()->timestamp())
->count())
如果它们的格式相同,您应该可以比较Unix时间戳。
我倾向于同意上述评论,我宁愿以人类可读的格式提供它,以便我可以看到我是否有任何奇怪的日期。
如果您有任何有趣的事情,请确保您的服务器,MySQL服务器和laravel配置时区都匹配。
答案 1 :(得分:0)
感谢Zoe, 但我选择whereBetween语句,这是我的解决方案。
$carbon = Carbon::now();
$start = Carbon::now()->startOfDay();
$visit = ViewTrack::where('id', $this->id)
->where('viewer', $visitor->id)
->whereBetween('ts', [$start->timestamp , $carbon->timestamp])
->get();
if($visit->count() > 0)
return true;
return false;