[英]Laravel: Get models where between two dates in this week
我有一個雄辯的模型,其中有兩列“開始日期”和“結束日期”。 我想顯示當前周正在進行的所有模型,即“開始日期”和“結束日期”之間與當前周的任何日期相匹配的任何日期。 我首先嘗試只使用這樣的開始日期:
$startOfWeek = Carbon::now()->startOfWeek()->startOfDay();
$endOfWeek = Carbon::now()->endOfWeek()->endOfDay();
$modelThisWeek = Model::whereBetween('startdate', [$startOfWeek, $endOfWeek])->get();
但自然地,任何一周前開始但仍在進行中(“結束日期”尚未完成)的內容都不會出現。
我怎樣才能有效地獲得本周有效的所有模型?
編輯:所以我有點想做(現在聽起來很愚蠢)是獲取 'startdate' 和 'enddate' 之間的所有日期,例如在一個數組中,獲取當前周之間所有日期的第二個數組並使用就像一個 array_intersect 並獲得這些模型。 我希望這次我解釋得更清楚一點。
編輯 2:一些示例數據和預期結果。
數據庫中的數據:
--------------------------------------------------
| ID | some_other_col | startdate | enddate |
--------------------------------------------------
| 1 | ... | 12. Jan 17 | 20. Feb 17 |
--------------------------------------------------
| 2 | ... | 12. Jan 17 | 18. Jan 17 |
--------------------------------------------------
| 3 | ... | 30. Jan 17 | 04. Feb 17 |
--------------------------------------------------
| 4 | ... | 04. Feb 17 | 07. Feb 17 |
--------------------------------------------------
| 5 | ... | 08. Feb 17 | 10. Feb 17 |
--------------------------------------------------
所以如果我想要本周內的所有模型:
29. 一月 17 - 05. 二月 17
我希望 ID 為 1、3、4 的模型;
就像在兩個日期(startOfWeek 和 endOfWeek)內正在進行的所有模型一樣。
如果您定義 2 個可能的輸出,您的問題就很簡單
您已經覆蓋的第一個輸出,所以只有第二個輸出需要覆蓋
您的查詢應該看起來像兩個輸出
$modelThisWeek = Model::where(['startdate','>='$startOfWeek],
['enddate','<=', $endOfWeek])
->orWhere(function ($query) {
$query->where('enddate', '>', $endOfWeek);
})
})->get();
它可能需要一些調整(如果您檢查本周並且您希望輸出仍在進行中的模型,該模型可能在幾周前開始等,我並不完全理解您)。 嘗試一下,如果還有其他條件,請隨時詢問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.