データベーステーブル内の1日以内のすべての行を返したい。私はLaravel 4を使用しています。これは私が試したものです:
$date = date('Y-m-d H:i:s');
return MainContact::where(DATEDIFF('timestamp', $date), '<=', 1)->get();
これは機能しません。ドキュメントを読みましたが、Laravel MySQL関数を渡すことができないようです。timestamp
は日時フィールドです。Laravel 4?
MySQLはすべての行のDATE_SUB関数の出力を計算する必要があるため、タイムスタンプ列のインデックスを使用できないため、user1977808からの回答は適切ではありません。このようなクエリは避けてください。毎回テーブル全体を処理する必要があります。
このようなものはどうですか:
return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();
>=
「1日以内」と言ったので、昨日より遅いタイムスタンプが必要です。
または、
Laravelにバンドルされている Carbon API を使用できます。
ModelName::where( 'timestamp', '>=', Carbon::now() )->get();
return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();
whereDate()
、whereDay()
、whereMonth()
、およびwhereYear()
を使用することもできます。この場合、whereDate()
は、Carbonの簡単な日付関数とともにそのまま使用できます。
return MainContact::whereDate('dateField', '<', Carbon::now()->subDay())->get();
次を使用して生のクエリを実行することもできます。
$results = DB::query( 'query' );
モデルオブジェクトを結果変数に戻すだけではありません