3

我正在使用 Laravel 5.0 并尝试删除表中的所有行,其中表中的行created_at早于 3 小时。

如何created_at使用 Carbon 检查年龄?

$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';
}

即使我更改 MySql 表中的“created_at”日期,此代码始终会回显“超过 3 小时”。

我究竟做错了什么?

4

3 回答 3

3

你有2个问题:

  • 您实际上并没有获取结果 ( ->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';
}
于 2015-08-17T11:05:23.433 回答
1

您实际上并没有运行查询 - 您if($photos)只是返回 true ,因为它是一个对象(查询构建器)。

改成:

$time = Carbon::now()->subHour(3);
$photos = Photos::where('created_at','<=',$time)->get();
if (!$photos->isEmpty()) {
    ...
}
于 2015-08-17T11:05:32.737 回答
0

我的方法是这样的:

$photos = Photos::where(DB::raw("TIMESTAMPDIFF(HOUR, 'created_at', NOW())"), '>', 3)->get();
foreach($photos as $photo) {
    // echo $photo->created_at . PHP_EOL;
}
于 2020-11-25T10:39:42.227 回答