首页 > 解决方案 > 获取数据集合并按开始和结束日期限制它们

问题描述

我有根据 start_date 和 end_date 列保存数据的 SpecialPrice 模型,如下面的屏幕

在此处输入图像描述

我想要实现的是以下内容:

  1. 如果用户选择从 2020-04-23 到 2020-04-26 的日期,我应该只检索第一个对象。
  2. 但是如果用户选择从 2020-04-23 到 2020-04-27 的日期,我应该只检索第一个和第二个对象。
  3. 但是如果用户选择从 2020-04-23 到 2020-05-01 的日期,我应该检索这三个对象等。

在我的模型中,我有作用域功能,但我尝试过,但我知道它有问题

public function scopeBetweenDates($query,$start_date , $end_date){
    return $query->whereRaw('? between start_date and end_date', [$start_date])
                ->orWhereRaw('? between start_date and end_date', [$end_date]);
}

提前致谢

标签: phplaraveleloquentscope

解决方案


这对我有用

public function scopeWhereIntersectsStartDate($query,$start_date){

    return  $query->whereNotNull('start_date')
                  ->where('start_date' , '>' , $start_date)
                  ->orWhere('end_date' , '>' , $start_date);
}

public function scopeWhereIntersectsEndDate($query,$end_date){

    return  $query->whereNotNull('end_date')
                  ->where('end_date' , '<' , $end_date)
                  ->orWhere('start_date' , '<' , $end_date);
}

推荐阅读