如何在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
相关产品推荐
相关产品推荐

