php - 获取数据集合并按开始和结束日期限制它们
问题描述
我有根据 start_date 和 end_date 列保存数据的 SpecialPrice 模型,如下面的屏幕
我想要实现的是以下内容:
- 如果用户选择从 2020-04-23 到 2020-04-26 的日期,我应该只检索第一个对象。
- 但是如果用户选择从 2020-04-23 到 2020-04-27 的日期,我应该只检索第一个和第二个对象。
- 但是如果用户选择从 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]);
}
提前致谢
解决方案
这对我有用
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);
}
推荐阅读
- sql - SQL SERVER - 违反唯一键约束
- pandas - 将一列文本转换为段落
- git - Git Bash 第一次运行。目录 \drivers\etc 不存在
- javascript - Javascript 警报导致页面内容消失
- javascript - 在反应材料表组件中获取异步数据
- python - 在 django 中创建新模型时所有模型都会重置
- python-3.x - 如何python删除不需要的图标字符
- sql - 使用身份而不是顺序时的随机数
- maxmind - Graylog geoip 没有显示地图上的所有位置
- c# - 连接到 Redshift 集群时出错 - Npgsql.PostgresException: 28000: no pg_hba.conf entry for host