繁体   English   中英

通过eloquent从laravel中db中的两个日期列中获取记录

[英]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_dateend_date等两个日期范围内拍摄的所有叶子(例如,从2020-08-012020-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); 
    } 
});

在哪里

  1. $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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM