2017-02-01 53 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的模型。这是必填字段。但是,无论如何感谢:) –

相关问题