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

Laravel按日期查询product表返回空数组的解决方法

问题原因

你当前使用的where语句是精确匹配逻辑,created_at字段为datetime类型,存储值包含时分秒,你传入的2019-01-12会被解析为2019-01-12 00:00:00,和表中存储的带具体时间的记录无法匹配,因此返回空结果。

可行实现方案

方案1:使用whereDate查询(推荐,可读性最高)

Laravel查询构造器专门提供了whereDate方法,用于匹配日期字段的日期部分,自动忽略时分秒:

public function index()
{
  $product = Product::select('id', 'name', 'created_at')
    ->whereDate('created_at', '2019-01-12')
    ->get()
    ->toArray();
  dd($product);
}

方案2:使用时间区间查询(性能最高,适合大数据量表)

筛选created_at处于当天0点到次日0点之间的记录,可以命中created_at字段的普通索引:

public function index()
{
  $product = Product::select('id', 'name', 'created_at')
    ->whereBetween('created_at', ['2019-01-12 00:00:00', '2019-01-13 00:00:00'])
    ->get()
    ->toArray();
  dd($product);
}

方案3:使用SQL日期函数匹配

直接调用MySQL的DATE()函数提取created_at的日期部分进行匹配:

public function index()
{
  $product = Product::select('id', 'name', 'created_at')
    ->whereRaw('DATE(created_at) = ?', ['2019-01-12'])
    ->get()
    ->toArray();
  dd($product);
}

小提示:如果表数据量超过10万,优先使用方案2的区间查询,避免字段函数转换导致索引失效,查询效率远高于另外两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:57:02