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

如何在Laravel的Eloquent中转换表列datetime类型为字符串以使用LIKE运算符

问题解决方法

你之前的写法错误原因是Laravel的where()方法默认会将第一个参数识别为字段名,不会直接解析SQL函数表达式,同时你漏写了CONVERT的格式参数126,还错误给CHECKINOUT.CHECKTIME加了单引号导致它被识别为字符串而非字段。

修正后的代码

直接使用whereRaw()方法写入原生的条件表达式即可:

$dailyData=CheckInOutModel::join('USERINFO', 'USERINFO.USERID', '=', 'CHECKINOUT.USERID')
    ->select('USERINFO.USERID as id','USERINFO.BADGENUMBER as bd', 'USERINFO.NAME as name','USERINFO.Image as photo','CHECKINOUT.*')
    // 替换原来的where为whereRaw,写入和你原生SQL一致的转换逻辑
    ->whereRaw("CONVERT(VARCHAR(25), CHECKINOUT.CHECKTIME, 126) LIKE ?", [$thisDay.'%'])
    ->orderBy('CHECKINOUT.CHECKTIME','desc')
    ->get();

注意这里用?参数绑定的方式传值,可以避免SQL注入风险。

更优的替代方案(推荐)

如果你只是要查询某一天的打卡数据,完全不需要用LIKE做模糊查询,Laravel自带的日期查询方法性能更好(可以用到CHECKTIME字段的索引):

->whereDate('CHECKINOUT.CHECKTIME', $thisDay)

这个方法会自动适配你当前的数据库类型,生成对应的日期比较逻辑,不需要手动写转换函数。

内容的提问来源于stack exchange,提问作者Md. Tazimul Islam Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:06:07