2013-01-15 454 views
8

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

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

これは動作しません。私はドキュメントを読んで、LaravelのMySQL関数を渡すことはできないようです。 timestampはdatetimeフィールドです。 Laravel 4でこれらの日付を比較するにはどうすればよいですか?

答えて

9

でuser1977808はあなたがいない与えた答えをモデルオブジェクトをしませんMySQLはtimestamp列のインデックスを使用できないため、すべての行に対してDATE_SUB関数の出力を計算する必要があるためです。そのようなクエリを避け、毎回テーブル全体を処理する必要があります!

はどのようにこのようなものについて:あなたは「日以下古い」と言ったので

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

私はそこに>=を置くので、彼らは昨日より後のタイムスタンプを持っている必要があります。

+0

ええ、私は彼のMySQLを調整しなければならなかった。 – sehummel

+2

私は 'MainContact :: where( 'timestamp'、 '>'、DB :: raw( 'NOW() - INTERVAL'、$ interval。 'DAY') - > get();を実行し、その後インターバルで渡しました – sehummel

+2

'MainContact :: where( 'timestamp'、 '>' strtotime(" - {$ interval} day)))>のように 'strtotime(" - 1 day ")'を使うこともできます。 get(); ' –

0

ます。また、使用して生のクエリを行うことができます。

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

あなたが唯一の結果に戻るVAR

+0

うん、これは私が今働いているアプローチです。 – sehummel

+0

私はもっと良い方法があると思っていました。 – sehummel

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

私は非常に似たようなやり方をしました。 – sehummel

0

またwhereDate()whereDay()whereMonth()whereYear()を使用することができます。この場合、whereDate()はカーボンの簡単な日付関数を、そのまま使用することができます:

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