web-dev-qa-db-ja.com

Laravel / Eloquentと比較日

データベーステーブル内の1日以内のすべての行を返したい。私はLaravel 4を使用しています。これは私が試したものです:

$date = date('Y-m-d H:i:s');
return MainContact::where(DATEDIFF('timestamp', $date), '<=', 1)->get();

これは機能しません。ドキュメントを読みましたが、Laravel MySQL関数を渡すことができないようです。timestampは日時フィールドです。Laravel 4?

8
sehummel

MySQLはすべての行のDATE_SUB関数の出力を計算する必要があるため、タイムスタンプ列のインデックスを使用できないため、user1977808からの回答は適切ではありません。このようなクエリは避けてください。毎回テーブル全体を処理する必要があります。

このようなものはどうですか:

return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();

>=「1日以内」と言ったので、昨日より遅いタイムスタンプが必要です。

10
duality_

または、

Laravelにバンドルされている Carbon API を使用できます。

ModelName::where( 'timestamp', '>=', Carbon::now() )->get();

参照: http://laravel.com/docs/5.1/eloquent-mutators

3
afifahmi
return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();
2
socketman

whereDate()whereDay()whereMonth()、およびwhereYear()を使用することもできます。この場合、whereDate()は、Carbonの簡単な日付関数とともにそのまま使用できます。

return MainContact::whereDate('dateField', '<', Carbon::now()->subDay())->get();

次を使用して生のクエリを実行することもできます。

$results = DB::query( 'query' );

モデルオブジェクトを結果変数に戻すだけではありません

0
Cees van Egmond