[英]Get records from two date columns in db in laravel via eloquent
我有一个名为user_leaves
的叶子表,其中存储了用户使用的叶子,该表具有这种结构。
id, leave_type_id, from_date, to_date, status, created_at, updated_at.
leave_type_id
基本上是我系统拥有的叶子类型的外键。
我想获取用户在start_date
和end_date
等两个日期范围内拍摄的所有叶子(例如,从2020-08-01
到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
可能超过我的 end_date 的情况,因此如果我计算 from_date 和 to_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 周”。
您可以使用whereBetween
子句,在 where between 您可以传递$from_date
和$to_date
如下:
$from = date('2018-01-01');
$to = date('2018-05-02');
youModal::whereBetween('column_from', [$from, $to])->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.