日付の間のどこ()?
" />
Laravel $q->where() 日付間の: 総合ガイド
問題ステートメント
クエリ $q-> ;where('recur_at', '>', date("Y-m-d H:i:s", time() - 604800)) は、現在の日付よりも大きい recur_at 値を持つプロジェクトを取得するという目的の基準を満たしていません。マイナス 7 日。
解決策 1
今後 7 日以内に繰り返される予定のプロジェクトを正確に検索するには、次のクエリを使用します。
1 2 3 4 5 | <code class = "php" > $projects = Project::where( function ( $q ) {
$q ->where(DB::raw( 'recur_at BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()' ));
$q ->where( 'status' , '<' , 5);
$q ->where( 'recur_cancelled' , '=' , 0);
});</code>
|
ログイン後にコピー
ソリューション 2 (Carbon で最適化)
日付操作に Carbon パッケージを使用してクエリを強化します:
1 2 3 4 | <code class = "php" > $projects = Project::where( 'recur_at' , '<=' , Carbon::now()->addWeek())
->where( 'recur_at' , '!=' , "0000-00-00 00:00:00" )
->where( 'status' , '<' , 5)
->where( 'recur_cancelled' , '=' , 0);</code>
|
ログイン後にコピー
最適化されたソリューション
Joel Friedman が提案したように、次のクエリはより簡潔で効率的です。
1 2 3 | <code class = "php" > $projects = Project::whereBetween( 'recur_at' , array (Carbon::now(), Carbon::now()->addWeek()))
->where( 'status' , '<' , 5)
->where( 'recur_cancelled' , '=' , 0);</code>
|
ログイン後にコピー
このソリューションでは、whereBetween メソッドを利用して recur_at フィールドの範囲を指定し、recur_at 値を持つプロジェクトを効果的に取得します。今後 7 日以内に。
以上がLaravel の $q->where() を使用して、次の 7 日間に繰り返されるプロジェクトを日付の間に効率的にクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。