12

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

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

これは機能しません。ドキュメントを読みましたが、LaravelMySQL関数を渡すことができないようです。 timestamp日時フィールドです。Laravel 4でこれらの日付を比較するにはどうすればよいですか?

4

5 に答える 5

11

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

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

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

>=「1日以内」とおっしゃっていたので入れましたので、昨日より遅いタイムスタンプが必要です。

于 2013-01-15T22:27:39.880 に答える
8

または、

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

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

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

于 2015-10-18T06:08:43.777 に答える
2
return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();
于 2013-01-15T22:10:17.780 に答える
2

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

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

于 2017-03-13T11:44:30.433 に答える
0

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

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

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

于 2013-01-15T21:47:27.990 に答える