sql >> データベース >  >> RDS >> Mysql

LaravelEloquentの日時フィールドからの日付の比較

    Laravel 4+は、次のメソッドを提供します:whereDay()whereMonth()whereYear()#3946 )およびwhereDate()#6879

    SQL DATE()を実行します あなたのために働き、SQLiteの違いを管理します。

    あなたの結果はそのように達成することができます:

    ->whereDate('date', '<=', '2014-07-10')
    

    その他の例については、#3946 の最初のメッセージを参照してください。 そしてこのLaravelDailyの記事 。


    更新: 上記のメソッドは便利ですが、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許容にすることをお勧めします。


    1. SQLで重複を表示しない方法

    2. MySQLのフィールドから最も一般的な値を選択します

    3. PostgresJSONデータ型Railsクエリ

    4. MySQLの各カテゴリからランダムレコードを取得するにはどうすればよいですか?