如何在 Laravel (MYSQL) 中添加间隔 30 天
Posted
技术标签:
【中文标题】如何在 Laravel (MYSQL) 中添加间隔 30 天【英文标题】:How To Add Interval 30 Days in Laravel (MYSQL) 【发布时间】:2020-12-07 10:38:45 【问题描述】:嗨,当我想在 Laravel 中使用间隔显示数据时,我得到了堆栈,我有这段代码,它在 mysql 上运行良好并显示了我想要的内容。但是如何将mysql代码实现到laravel?
这是mySql代码
SELECT * FROM projects WHERE end_date BETWEEN CURRENT_DATE() AND DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY)
我在 Laravel Controller 上尝试了一些方法,但数组为空
$highlightProject = project::select('*')->where(DB::raw('end_date BETWEEN CURRENT_DATE() AND DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY)'))->get();
dd($highlightProject);
【问题讨论】:
您能否通过检查日志来验证查询是否正确生成? 【参考方案1】:您没有得到想要的结果的原因是因为您使用的是where
而不是whereRaw
。在这种情况下,您的查询将返回:
select * from `projects`
where end_date BETWEEN
CURRENT_DATE() AND DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY) is null
(注意is null
部分)。
要获得您想要的结果,请将where
更改为whereRaw
(您可以删除DB::raw
):
project::whereRaw('end_date BETWEEN CURRENT_DATE() AND DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY)')->get();
或者,您可以混合使用whereBetween 和Carbon:
project::whereBetween('end_date', [now(), now()->addDays(30)])->get();
查看此answer 了解更多信息。
【讨论】:
【参考方案2】:这可能不是您想要的解决方案,(我不知道为什么您当前的查询不起作用,正如@tadman 建议的那样,我也建议检查生成的查询),但另一种方法是尝试使用Laravel 附带的查询构建器方法和 Carbon 日期库。
$highlightProject = Project::whereBetween('end_date', [\Carbon\Carbon::today(), \Carbon\Carbon::today()->addDays(30)])->get();
【讨论】:
【参考方案3】:尝试使用 whereRaw() 有时 where() 不能正常工作 DB::raw()
$highlightProject = project::select('*')->whereRaw(DB::raw('end_date BETWEEN CURRENT_DATE() AND DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY)'))->get();
【讨论】:
你不需要使用DB::raw
和whereRaw
:)以上是关于如何在 Laravel (MYSQL) 中添加间隔 30 天的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 5.5 迁移中将 DB::unprepared() 用于 mysql 函数和存储过程