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

Laravel Eloquent如何根据日期数组匹配created_at查询CLICK模型数据

解决Laravel中CLICK模型按指定日期数组匹配created_at的问题

核心问题是数组里的日期格式(m/d/Y)和created_at的datetime格式不匹配,直接用whereIn会因为格式不对查不到数据,解决思路是统一两边的日期格式,以下是两种可行方案:

方案一:转换日期数组为数据库兼容格式,配合whereIn和日期提取

先把数组中的每个日期转换为Y-m-d格式(数据库存储的标准日期格式),再通过DATE()函数提取created_at的日期部分进行匹配:

$dates = ['09/08/2022', '09/16/2022', '03/08/2022'];

// 转换数组内的日期格式为Y-m-d
$formattedDates = array_map(function($date) {
    return \Carbon\Carbon::createFromFormat('m/d/Y', $date)->toDateString();
}, $dates);

// 查询匹配的点击数据
$clicks = \App\Models\Click::whereIn(\Illuminate\Support\Facades\DB::raw('DATE(created_at)'), $formattedDates)->get();

方案二:使用orWhereDate循环匹配每个日期

如果不想提前处理数组格式,可以循环日期数组,逐个添加orWhereDate条件:

$dates = ['09/08/2022', '09/16/2022', '03/08/2022'];

$query = \App\Models\Click::query();

foreach ($dates as $date) {
    $carbonDate = \Carbon\Carbon::createFromFormat('m/d/Y', $date);
    $query->orWhereDate('created_at', $carbonDate);
}

$clicks = $query->get();

注意事项

  • 确保Carbon的时区配置和数据库时区一致,避免日期转换出现偏差
  • 第一种方案性能更优,因为只生成一条IN查询;第二种方案会生成多个OR条件,数据量大时优先选方案一

内容的提问来源于stack exchange,提问作者Murtaja Ahmed Noyeem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:54:21