Laravel 4+は、次のメソッドを提供します:whereDay()
、whereMonth()
、whereYear()
(#3946
)およびwhereDate()
(#6879
。
SQL DATE()
を実行します あなたのために働き、SQLiteの違いを管理します。
あなたの結果はそのように達成することができます:
->whereDate('date', '<=', '2014-07-10')
その他の例については、#3946
の最初のメッセージを参照してください。 そしてこの
更新: 上記のメソッドは便利ですが、Arthが指摘しているように、DATE()
であるため、大規模なデータセットでは非効率的です。 SQL関数を各レコードに適用する必要があるため、可能なインデックスは破棄されます。
比較する方法は次のとおりです(ただし、以下の注をお読みください):
->where('date', '<=', '2014-07-10 23:59:59')
->where('date', '<', '2014-07-11')
// '2014-07-11'
$dayAfter = (new DateTime('2014-07-10'))->modify('+1 day')->format('Y-m-d');
->where('date', '<', $dayAfter)
注:
- 23:59:59は(今のところ)1秒の精度で問題ありませんが、次の記事を参照してください:23:59:59は1日の終わりではありません。いいえ、本当に!
- 「ゼロ日付」の場合(「0000-00-00 00:00:00」)に注意してください。これらの「ゼロ日付」は避ける必要がありますが、非常に多くの問題の原因になります。必要に応じて、フィールドをnull許容にすることをお勧めします。