如何检查行是否早于2小时的Carbon时间戳

3

我正在使用Laravel 5.0,尝试删除所有创建时间created_at超过3小时的表格行。

如何使用Carbon检查created_at的年龄?

$time = Carbon::now()->subHour(3);
$photos = Photos::where('created_at','<=',$time);
if($photos){
echo 'older then 3 hours';
}else
echo 'not older then 3 hours';
}

这段代码始终会输出“超过3小时”,即使我在MySQL表中更改了“created_at”日期。

我做错了什么?


我不知道你做错了什么,请告诉我们出了什么问题。你有什么问题? - Charlotte Dunois
我会编辑上面的代码并向您展示。 - Spoofy
3个回答

3

你有两个问题:

  • 你实际上没有获取结果(->get()
  • $photos 是一个 Collection 对象,即使它是一个空的集合也总是会被计算为 true

解决方案

$time = Carbon::now()->subHour(3);
$photos = Photos::where('created_at','<=',$time)->get();
if($photos->count()){
    echo 'older than 3 hours';
} else {
    echo 'not older than 3 hours';
}

1
你实际上并没有运行查询 - 你的 if($photos) 只是返回 true,因为它是一个对象(即查询构建器)。
更改为:
$time = Carbon::now()->subHour(3);
$photos = Photos::where('created_at','<=',$time)->get();
if (!$photos->isEmpty()) {
    ...
}

0

我的方法会是这样的:

$photos = Photos::where(DB::raw("TIMESTAMPDIFF(HOUR, 'created_at', NOW())"), '>', 3)->get();
foreach($photos as $photo) {
    // echo $photo->created_at . PHP_EOL;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接