Laravel基于dateOfEnrollment列查询入学超4年记录的实现方法
Laravel查询入学时长超过4年记录的实现方案
前置准备
如果你使用Eloquent ORM查询,需要先确保对应模型配置正确:
// app/Models/BasicInfo.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class BasicInfo extends Model { // 显式指定关联数据表,避免Laravel默认匹配basic_infos表 protected $table = 'basicinfo'; // 配置日期字段自动序列化,Laravel 7+推荐用$casts protected $casts = [ 'dateOfEnrollment' => 'date', ]; }
实现方法
- 方法1:查询构造器直接操作表
use Illuminate\Support\Facades\DB; $enrollOver4Years = DB::table('basicinfo') ->whereRaw('dateOfEnrollment <= DATE_SUB(CURDATE(), INTERVAL 4 YEAR)') ->get();
该方法直接执行原生SQL条件,CURDATE()取数据库当前日期,减去4年的时间节点,只要入学日期早于等于该节点的记录都符合要求。
- 方法2:Eloquent ORM + Carbon日期计算(推荐)
use App\Models\BasicInfo; use Carbon\Carbon; $enrollOver4Years = BasicInfo::whereDate('dateOfEnrollment', '<=', Carbon::now()->subYears(4)) ->get();
该写法更符合Laravel开发规范,依赖Carbon做日期计算,自动适配Laravel配置的时区,跨数据库兼容性更好。
注意事项
请确保Laravel配置文件
config/app.php中的timezone时区配置和你的数据库时区保持一致,避免日期计算出现偏差。
内容的提问来源于stack exchange,提问作者user3418427
相关产品推荐
相关产品推荐

