[英]Get records from two date columns in db in laravel via eloquent
i have a leaves table called user_leaves
in which leaves taken by users are stored, table has this structure.我有一个名为
user_leaves
的叶子表,其中存储了用户使用的叶子,该表具有这种结构。
id, leave_type_id, from_date, to_date, status, created_at, updated_at.
leave_type_id
is basically a foreign key of types of leaves my system has. leave_type_id
基本上是我系统拥有的叶子类型的外键。
I want to fetch all leaves taken by a user in a range of two dates like start_date
and end_date
(for example all leaves from 2020-08-01
to 2020-08-31
.我想获取用户在
start_date
和end_date
等两个日期范围内拍摄的所有叶子(例如,从2020-08-01
到2020-08-31
所有叶子。
I want records in numbers like,我想要像这样的数字记录,
{
"user_id" : 1,
"leaves" :
{
"medical_leave" : 2,
"earned_leave" : 5,
"sick_leave" : 3
}
}
I used the code我用了代码
$UserLeaves = UserLeave::whereDate('date_from', '>=', $start_date)
->whereDate('date_from', '<=', $end_date)
->get();
The problem is that if i choose from_date
to query my result ,and then loop through $UserLeaves
to get all days between from_date and to_date for each leave_type.问题是,如果我选择
from_date
来查询我的结果,然后遍历$UserLeaves
以获取每个 leave_type 的 from_date 和 to_date 之间的所有天数。 Their are cases when to_date
may exceed my end_date and thus giving wrong data if i calculate all days between from_date and to_date.它们是
to_date
可能超过我的 end_date 的情况,因此如果我计算 from_date 和 to_date 之间的所有天数,则会给出错误的数据。
You would do something like this你会做这样的事情
$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);
}
});
Where在哪里
$baseQuery
is the query you write to perform all your selections, aggregation etc. $baseQuery
是您为执行所有选择、聚合等而编写的查询。 The above code accounts for null values and additionally you could perform additional checks before appending the query to your base query like "date from is not greater than 1 week before today".上面的代码考虑了空值,此外,您可以在将查询附加到基本查询之前执行额外的检查,例如“日期不大于今天之前的 1 周”。
you can use whereBetween
clause and in wherebetween you can pass $from_date
and $to_date
as below:您可以使用
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.