电话
400 9058 355
本文介绍在 laravel 中直接利用数据库字段(如 minutes)动态计算时间范围的方法,避免额外查询,通过 sql 原生函数(如 now() - interval)实现高效、安全的时间条件过滤。
在 Laravel 应用中,我们常需根据数据库中存储的动态时间偏移量(例如 minutes 字段)来筛选近期记录。但若尝试将 PHP 的 Carbon::now()->subMinutes('minutes') 直接用于 Eloquent 查询,会触发错误:ErrorException: A non-numeric value encountered——这是因为 'minutes' 被当作字符串字面量传入 PHP 函数,而非从数据库读取的整数值;更本质的原因是:Carbon 是 PHP 层工具,无法在 SQL 执行时访问数据库行级字段值。
正确做法是将时间计算逻辑下推至数据库层,利用 SQL 原生日期函数完成动态运算。以 MySQL 为例,可使用 NOW() - INTERVAL {column} MINUTE:
use Illuminate\Support\Facades\DB;
use App\Models\Contest;
$contests = Contest::latest()
->where('created_at', '>', DB::raw('NOW() - INTERVAL minutes MINUTE'))
->paginate(4);✅ 该写法优势显著:
minutes 列(假设为 INT)转为整数参与运算,规避 PHP 类型转换风险。⚠️ 注意事项:
总结:当需基于数据库字段动态计算时间条件时,应放弃 PHP 层时间操作,转而借助目标数据库的原生日期函数,并通过 DB::raw() 集成到 Eloquent 查询中——这既是性能最优解,也是语义最准确的实现方式。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...