php - 通过 eloquent 从 laravel 中 db 中的两个日期列中获取记录
问题描述
我有一个叶子表user_leaves
,其中存储了用户使用的叶子,表具有这种结构。
id, leave_type_id, from_date, to_date, status, created_at, updated_at.
leave_type_id
基本上是我系统的叶子类型的外键。
我想获取用户在两个日期范围内拍摄的所有叶子,例如start_date
and end_date
(例如从2020-08-01
to的所有叶子2020-08-31
。
我想要像这样的数字记录,
{
"user_id" : 1,
"leaves" :
{
"medical_leave" : 2,
"earned_leave" : 5,
"sick_leave" : 3
}
}
我使用了代码
$UserLeaves = UserLeave::whereDate('date_from', '>=', $start_date)
->whereDate('date_from', '<=', $end_date)
->get();
问题是,如果我选择from_date
查询我的结果,然后循环$UserLeaves
获取每个 leave_type 的 from_date 和 to_date 之间的所有天数。to_date
如果我计算 from_date 和 to_date 之间的所有天数,它们的情况可能会超过我的 end_date 并因此给出错误的数据。
解决方案
你会做这样的事情
$baseQuery = $baseQuery->where(function ($query) use ($date_created_from, $date_created_to) {
if (isset($date_created_from) && $date_created_from != '') {
$dateFrom = Carbon::parse($date_created_from)->format('Y-m-d');
$query->whereDate('date_column', '>=', $dateFrom);
}
if (isset($date_created_to) && $date_created_to != '') {
$dateEnd = Carbon::parse($date_created_to)->format('Y-m-d');
$query->whereDate('date_column', '<=', $dateEnd);
}
});
在哪里
$baseQuery
是您为执行所有选择、聚合等而编写的查询。
上面的代码考虑了空值,此外,您可以在将查询附加到基本查询之前执行其他检查,例如“日期从不大于今天前 1 周”。
推荐阅读
- xaml - 从 Xamarin 表单中的列表中删除项目
- c++ - 有没有办法使用类的私有枚举值作为模板参数?
- c# - 返回奇数 JSON 层次结构的集合导航属性
- amazon-web-services - AWS 弹性 IP 与公共 IP
- database - MongoDB:进行远程访问时“连接尝试失败”
- filechooser - JavaFX 的 FileChooser 中无法显示选定的文件
- ios - webview 上的 datepicker 显示奇怪。在 IphoneX 上
- c++ - C++ 在结构向量中存储回调函数 - 性能、调用选项、释放问题
- babeljs - 添加计算装饰器会导致 TypeError
- php - 从 laravel 中间件调用控制器方法