Laravel: 获取本周两个日期之间的模型
Laravel: Get models where between two dates in this week
我有一个 eloquent 模型,其中有两列 'startdate' 和 'enddate'。我想显示本周正在进行的所有模型,即 'startdate' 和 'enddate' 之间与本周任何日期匹配的任何日期。
我首先尝试只使用这样的开始日期:
$startOfWeek = Carbon::now()->startOfWeek()->startOfDay();
$endOfWeek = Carbon::now()->endOfWeek()->endOfDay();
$modelThisWeek = Model::whereBetween('startdate', [$startOfWeek, $endOfWeek])->get();
但自然地,任何一周前开始但仍在进行中('enddate' 尚未完成)的内容都不会显示。
我怎样才能有效地获得本周有效的所有模型?
编辑:所以我有点想做的(现在听起来很愚蠢)是获取 '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. 1 月 17 日 - 05. 2 月 17 日
我希望 ID 为 1、3、4 的模型;
就像在这两个日期(startOfWeek 和 endOfWeek)内进行的所有模型一样。
如果你定义了 2 个可能的输出,你的问题就很简单了
- 您的模型有开始和结束日期
- 您的模型只有开始日期(结束日期为空)
第一个输出你已经覆盖了,所以只需要覆盖第二个输出
对于两个输出,您的查询应该看起来像
$modelThisWeek = Model::where(['startdate','>='$startOfWeek],
['enddate','<=', $endOfWeek])
->orWhere(function ($query) {
$query->where('enddate', '>', $endOfWeek);
})
})->get();
它可能需要一些调整(我不完全理解你是否检查了这周并且你希望输出仍在进行中的模型可能在几周前开始等)。试一试,如果还有其他条件,请随时询问。
我有一个 eloquent 模型,其中有两列 'startdate' 和 'enddate'。我想显示本周正在进行的所有模型,即 'startdate' 和 'enddate' 之间与本周任何日期匹配的任何日期。 我首先尝试只使用这样的开始日期:
$startOfWeek = Carbon::now()->startOfWeek()->startOfDay();
$endOfWeek = Carbon::now()->endOfWeek()->endOfDay();
$modelThisWeek = Model::whereBetween('startdate', [$startOfWeek, $endOfWeek])->get();
但自然地,任何一周前开始但仍在进行中('enddate' 尚未完成)的内容都不会显示。
我怎样才能有效地获得本周有效的所有模型?
编辑:所以我有点想做的(现在听起来很愚蠢)是获取 '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. 1 月 17 日 - 05. 2 月 17 日
我希望 ID 为 1、3、4 的模型;
就像在这两个日期(startOfWeek 和 endOfWeek)内进行的所有模型一样。
如果你定义了 2 个可能的输出,你的问题就很简单了
- 您的模型有开始和结束日期
- 您的模型只有开始日期(结束日期为空)
第一个输出你已经覆盖了,所以只需要覆盖第二个输出
对于两个输出,您的查询应该看起来像
$modelThisWeek = Model::where(['startdate','>='$startOfWeek],
['enddate','<=', $endOfWeek])
->orWhere(function ($query) {
$query->where('enddate', '>', $endOfWeek);
})
})->get();
它可能需要一些调整(我不完全理解你是否检查了这周并且你希望输出仍在进行中的模型可能在几周前开始等)。试一试,如果还有其他条件,请随时询问。