我有一个雄辩的模型,我有两列'startdate'和'enddate'。我想显示当前正在进行的所有模型,即“startdate”和“enddate”之间的任何日期,它们与当前周的任何日期相匹配。 我首先试图只使用这样的startdate:
$startOfWeek = Carbon::now()->startOfWeek()->startOfDay();
$endOfWeek = Carbon::now()->endOfWeek()->endOfDay();
$modelThisWeek = Model::whereBetween('startdate', [$startOfWeek, $endOfWeek])->get();
但很自然地,任何一周以前开始但仍在进行的事情('enddate'尚未完成)都不会出现。
我怎样才能有效地获得本周有效的所有模型?
编辑:所以我有点想做(现在听起来很愚蠢)就是把所有日期都放在'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日 - 5月17日。
我希望ID为1,3,4的模型;
就像两个日期(startOfWeek和endOfWeek)中正在进行的所有模型一样。
答案 0 :(得分:1)
如果定义2个可能的输出
,问题就很简单了您已经介绍过的第一个输出,所以只需要掩盖第二个输出
您的查询应该与两个输出相似
$modelThisWeek = Model::where(['startdate','>='$startOfWeek],
['enddate','<=', $endOfWeek])
->orWhere(function ($query) {
$query->where('enddate', '>', $endOfWeek);
})
})->get();
它可能需要一些调整(如果您本周检查并且您想要输出仍在进行的模型,我可能不需要完全理解您可能在几周前开始等)。尝试一下,如果还有其他条件可以随意询问。