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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:05:18