2017-02-01 118 views
0

我有一個雄辯的模型,其中有兩列'startdate'和'enddate'。我想顯示當前一週正在進行的所有模型,即「startdate」和「enddate」之間匹配當前任何日期的任何日期。 我第一次嘗試只用這樣的STARTDATE獲得:Laravel:在本週的兩個日期之間獲取模型

$startOfWeek = Carbon::now()->startOfWeek()->startOfDay(); 
$endOfWeek = Carbon::now()->endOfWeek()->endOfDay(); 

$modelThisWeek = Model::whereBetween('startdate', [$startOfWeek, $endOfWeek])->get(); 

但當然,任何開始一個多星期前,但目前仍在進行中(「結束日期」尚未完成),將不顯示向上。

我怎樣纔能有效地獲得本週有效的所有模型?

編輯:所以我有點想要做的(聽起來很愚蠢)是獲取'startdate'和'enddate'之間的所有日期,比如在數組中,例如獲取第二個數組中的所有日期當前一週,並使用像array_intersect並獲得這些模型。我希望我這次更清楚地解釋一下。

編輯2:一些樣本數據和預期結果。

數據在DB:

-------------------------------------------------- 
| 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. 1月17日 - 05年02月17

我期待與ID爲1的模型,3,4;
就像在兩個日期(startOfWeek和endOfWeek)內正在進行的所有模型一樣。

+0

你能像'Model :: whereBetween() - > whereBetween() - > get()'那樣調用'whereBetween' 2次嗎? – JustOnUnderMillions

+0

你可以做到這一點,但我只能得到本週startdate和本週enddate的模型。如果開始日期與兩個月前相似,並且結束日期與三週內相似,該怎麼辦? –

+0

這可以幫助一點http://stackoverflow.com/questions/26082043/wherebetween-dates-in-laravel-4-eloquent#26082523我不使用雄辯 - 似乎或WhereBetween可以幫助!? – JustOnUnderMillions

回答

0

你的問題很簡單,如果你定義兩個可能的輸出

  1. 你的模型得到了開始日期和結束日期
  2. 你的模型只拿到了開始日期(截止日期爲null)

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

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

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

這將可能需要一些調整,(我沒有完全理解你,如果你檢查這一週,你在想輸出可以開始幾周前等仍在進行模型)。嘗試一下,如果有更多的附加條件隨意問。

+0

是的,我希望模型仍在進行中,即幾周前開始的模型。沒有和enddate的模型從來沒有,所以'orWhere'永遠不會發布一些東西,第一個只會在一週內給出開始和結束日期。 –

+0

@AgashThamo。檢查更新的答案,我認爲這應該現在工作 – KuKeC

+0

可悲的是,我編輯了我的問題,以更清楚地解釋我想做什麼。沒有startdate或enddate = null的模型。這是必填字段。但是,無論如何感謝:) –

相關問題