Laravel中如何用where方法比较两个数据库字段值?
Laravel中比较两个数据库字段的实现方法
在Laravel里,普通的where方法无法直接在第三个参数中引用数据库字段(因为该参数会被当作PHP层面的绑定值处理),要比较两个字段或者基于字段计算后的值进行条件判断,可以用以下两种方式:
1. 直接比较两个字段:使用whereColumn
如果只是单纯比较两个字段的大小关系(比如判断tnx_time是否小于duration字段的日期值),可以用Laravel提供的whereColumn方法,它专门用于字段间的比较:
$trnxs = Transaction::whereColumn('tnx_time', '<', 'duration')->get();
2. 基于字段计算后比较:使用whereRaw
如果需要像你示例中那样,先对duration字段的值进行日期计算,再和tnx_time比较,就得用whereRaw直接编写SQL表达式,让数据库层面完成字段的计算和比较。
比如假设duration字段存储的是天数(整数类型),要计算当前日期加上该天数后的日期,再判断tnx_time是否小于这个日期,代码如下:
$trnxs = Transaction::whereRaw('tnx_time < DATE_ADD(CURDATE(), INTERVAL duration DAY)')->get();
如果duration存储的是类似"+7 days"这样的时间偏移字符串,可根据你使用的数据库调整SQL函数,比如MySQL中可以这样写:
$trnxs = Transaction::whereRaw('tnx_time < DATE(NOW() + INTERVAL duration)')->get();
这样就能实现基于数据库字段值的条件判断了。
内容的提问来源于stack exchange,提问作者Billi Alt
相关产品推荐
相关产品推荐

