Laravel查询超15天交付日期及默认状态报错求助
解决Laravel查询中的列不存在错误
嘿,这个错误我太熟啦!问题出在你把整个日期判断条件当成了一个列名来处理,Laravel自然找不到这个不存在的列~
错误原因
你大概率是直接把delivery_date + INTERVAL 15 DAY < NOW()这个SQL表达式作为字符串传给了where()方法,Laravel会默认把这个字符串解析成列名,所以才会抛出Unknown column的错误。
两种正确的解决方式
方式一:使用whereRaw()执行原生SQL条件
直接用whereRaw()方法传入完整的SQL条件,Laravel会原样解析这个表达式,不会把它当成列名:
$secondstatus = DB::table('registrations') ->join('ssi_tracks', 'registrations.registration_id', '=', 'ssi_tracks.registration_id') ->select('ssi_tracks.ssi_track_id', 'address', 'model', 'chassis', 'delivery_date', 'ssi_tracks.track_second_status') ->whereRaw('delivery_date + INTERVAL 15 DAY < NOW()') ->where('ssi_tracks.track_track_status', 0) ->get();
方式二:用Laravel日期查询方法(推荐)
用Laravel自带的日期处理方法,更符合框架风格,还能自动处理时区问题:
$secondstatus = DB::table('registrations') ->join('ssi_tracks', 'registrations.registration_id', '=', 'ssi_tracks.registration_id') ->select('ssi_tracks.ssi_track_id', 'address', 'model', 'chassis', 'delivery_date', 'ssi_tracks.track_second_status') ->whereDate('delivery_date', '<', now()->subDays(15)) // 等价于"交付日期超过15天"的逻辑 ->where('ssi_tracks.track_track_status', 0) ->get();
这里now()->subDays(15)会生成当前时间往前推15天的时间,判断delivery_date早于这个时间,就满足“超过15天”的需求。
内容的提问来源于stack exchange,提问作者user9461267
相关产品推荐
相关产品推荐

