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

Laravel查询Vehicle模型时,如何筛选指定日期范围的关联fuel_entries

Laravel关联模型日期范围过滤实现

要实现查询Vehicle模型时,仅获取指定日期范围内的fuel_entries关联数据,同时按需筛选车辆,可以按以下方式操作:

方法一:仅保留有符合条件关联数据的车辆

如果需要只返回存在指定日期范围内fuel_entries的车辆,且关联数据仅包含该时间段的记录,用with()闭包过滤关联数据,搭配whereHas()筛选车辆:

// 定义目标日期范围
$startDate = '2024-01-01';
$endDate = '2024-06-30';

$vehicles = Vehicle::with(['fuels' => function ($query) use ($startDate, $endDate) {
    // 替换date_column为fuel_entries表中存储日期的字段(比如created_at、entry_date)
    $query->whereBetween('date_column', [$startDate, $endDate]);
}])->whereHas('fuels', function ($query) use ($startDate, $endDate) {
    // 和上面的条件保持一致,确保车辆存在符合日期范围的fuel_entries
    $query->whereBetween('date_column', [$startDate, $endDate]);
})->get();

方法二:保留所有车辆,仅返回符合条件的关联记录

如果需要获取全部车辆,但仅展示指定日期范围内的fuel_entries(无符合条件记录的车辆,其fuels关联数组为空),只需保留with()的闭包过滤逻辑:

$startDate = '2024-01-01';
$endDate = '2024-06-30';

$vehicles = Vehicle::with(['fuels' => function ($query) use ($startDate, $endDate) {
    $query->whereBetween('date_column', [$startDate, $endDate]);
}])->get();

补充:日期条件的其他写法

如果日期字段是created_at,也可以用区间比较替代whereBetween:

$query->where('created_at', '>=', $startDate)
      ->where('created_at', '<=', $endDate);

内容的提问来源于stack exchange,提问作者Shah Foyez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:15:41