You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8.*中如何使用Carbon校验日期筛选仅展示当日及未来活动

问题解决

错误原因

你遇到的SQL报错是Laravel查询构造器where方法的语法使用错误导致的:

Laravel的where方法需要按「字段名、比较运算符、匹配值」三个参数的格式传递,你直接把比较运算写在第一个参数位置时,PHP会先执行'date_of_event' >= $date的逻辑判断,返回布尔值1或0,相当于你实际传入的是where(1),才会触发「Unknown column '1' in 'where clause'」的报错。

正确实现代码

1. 控制器逻辑修改

首先确保控制器顶部引入Carbon类:

use Carbon\Carbon;

然后修改index方法代码如下,原有多余的校验循环、调试dump都可以直接删除,查询时已经完成了有效活动的筛选:

public function index()
{
    // 获取今日0点的时间对象
    $today = Carbon::today();
    // 按正确语法构造查询条件,仅取出举办日期大于等于今日的活动
    $events = Event::where('date_of_event', '>=', $today)->get();

    return view('frontend.index', compact('events'));
}

如果你的date_of_event是带时分秒的datetime类型,希望仅按日期维度筛选(忽略时分秒),可以改用whereDate方法:

$events = Event::whereDate('date_of_event', '>=', $today)->get();

2. Blade模板调整

原有Blade模板不需要做任何修改,已经可以正常循环渲染筛选后的有效活动。

验证方法

如果需要排查SQL生成是否正确,可以临时打印查询语句确认:

dd(Event::where('date_of_event', '>=', $today)->toSql());

正常输出的SQL语句应该包含where date_of_event >= ?的条件,没有语法错误。

内容的提问来源于stack exchange,提问作者MichalGrab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:39:02