簡體   English   中英

Laravel:獲取本周兩個日期之間的模型

[英]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 個可能的輸出,您的問題就很簡單

  1. 您的模型有開始和結束日期
  2. 您的模型只有開始日期(結束日期為空)

您已經覆蓋的第一個輸出,所以只有第二個輸出需要覆蓋

您的查詢應該看起來像兩個輸出

$modelThisWeek = Model::where(['startdate','>='$startOfWeek],
                              ['enddate','<=', $endOfWeek])
               ->orWhere(function ($query) {
                   $query->where('enddate', '>',  $endOfWeek);
               })
           })->get();

它可能需要一些調整(如果您檢查本周並且您希望輸出仍在進行中的模型,該模型可能在幾周前開始等,我並不完全理解您)。 嘗試一下,如果還有其他條件,請隨時詢問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM