3

Laravel 5.0 を使用しておりcreated_at、3 時間より古いテーブル内のすべての行を削除しようとしています。

created_atCarbonの年齢を確認するにはどうすればよいですか?

$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())
  • $photostrue空のコレクションであっても、常に評価される Collection オブジェクトです。

解決

$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 に答える