式からテーブルのすべての行を取得したい:
table.date <= 2014-07-10
ただし、列に日時が含まれている場合は、次のように言います。
2014-07-10 12:00:00
しかし、私がそうするなら:
where('date', '<=', $date)
行を取得しません。
これは、$ date = 2014-07-10であり、MySQLが2014-07-10 00:00:00であると想定するためです。
通常のMySQLでは
where DATE(date) <= $date
LaravelのEloquentを使用すると、同等のものは何でしょうか?
Laravel 4+は、これらのメソッドを提供します:whereDay()
、whereMonth()
、whereYear()
( #3946 )およびwhereDate()
( #6879 )。
SQL DATE()
の作業を行い、SQLiteの違いを管理します。
結果は次のように達成できます。
->whereDate('date', '<=', '2014-07-10')
その他の例については、最初のメッセージ #3946 およびこの Laravel Daily article を参照してください。
更新:上記の方法は便利ですが、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)
ノート:
使用を検討しましたか:
where('date', '<', '2014-08-11')
MySQLのインデックス付きカラムでDATE()
関数を使用しないでください。これにより、エンジンがインデックスを使用できなくなります。
UPDATE
DATE()
とインデックスの重要性については意見の相違があるように思えるので、違いを示す fiddle を作成しました。POSSIBLE KEYS
を参照してください。
日付 '2016-07-14'のすべてのレコードを取得できます
whereDate('date','=','2016-07-14')
または動的な日付に別のコードを使用
whereDate('date',$date)
これを使用できます
whereDate('date', '=', $date)
WhereDateを指定すると、datetimeフィールドの日付のみを比較します。
それでも解決する方法を疑問に思っている場合。
私が使う
$protected $dates = ['created_at','updated_at','aired'];
私のモデルとどこで
where('aired','>=',time())
そのため、Unixを使用してどこで比較するかを決めてください。
一方、ビューでは、日付オブジェクトを使用する必要があります。
それが誰かを助けることを願っています!