如何在 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::rawwhereRaw :)

以上是关于如何在 Laravel (MYSQL) 中添加间隔 30 天的主要内容,如果未能解决你的问题,请参考以下文章

laravel 动态添加调度器

如何在 laravel 5.5 迁移中将 DB::unprepared() 用于 mysql 函数和存储过程

Laravel中的MySQL子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?

根据其他列在 HSQLDB 中添加日期间隔

向日期添加指定的时间间隔(mysql)

一般错误:1215 无法添加外键约束,Laravel 5 & MySQL