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

Laravel Query Builder与Eloquent查询均返回Null结果求助

问题排查与解决思路

根据你描述的情况,SQL在数据库管理器中能正常返回结果,但Laravel查询返回null,可能的原因及解决办法如下:

1. 时区/日期格式不匹配

这是最常见的问题根源:

  • 检查Laravel配置时区(config/app.php中的timezone项)与数据库时区是否一致。若数据库存储UTC时间,而你传入的start_date是本地时间,会导致日期匹配失效。
  • 用whereDate方法替代直接匹配,它会忽略时间部分仅匹配日期:
    $drawings = \DB::query()
         ->select('id')
         ->from('drawings')
         ->where('game_id', '=', $game->id)
         ->whereDate('draw_date', '=', $this->pc->options['start_date'])
         ->first();
    
  • 借助Carbon统一日期格式,确保与数据库存储格式一致:
    use Carbon\Carbon;
    
    $date = Carbon::parse($this->pc->options['start_date'])->toDateTimeString();
    $drawings = \DB::query()
         ->select('id')
         ->from('drawings')
         ->where('game_id', '=', $game->id)
         ->where('draw_date', '=', $date)
         ->first();
    

2. 模型属性隐藏(仅针对第一种模型查询写法)

如果你使用DrawingsModel查询,检查模型的$hidden属性是否包含id:

// DrawingsModel.php
protected $hidden = ['id']; // 若存在该行,会导致id不被返回

解决办法:移除$hidden中的id,或查询时强制显示该字段:

$drawings = DrawingsModel::query()
    ->select('id')
    ->from('drawings')
    ->where('draw_date', '=', $this->pc->options['start_date'])
    ->makeVisible('id')
    ->get()
    ->toArray();

3. 确认查询日志对应当前请求

查询日志可能累积之前的请求记录,导致你看到的并非当前执行的SQL。执行查询前先清空日志:

DB::flushQueryLog(); // 清空旧日志
$drawings = \DB::query()
     ->select('id')
     ->from('drawings')
     ->where('game_id', '=', $game->id)
     ->where('draw_date', '=', $this->pc->options['start_date'])
     ->first();
dump(DB::getQueryLog()); // 此时显示的是当前查询的日志

4. 数据类型严格匹配

极少数情况下,数据库字段类型与绑定值类型不匹配会导致问题(比如game_id是字符串类型,但$game->id是整数)。可尝试强制转换类型:

$drawings = \DB::query()
     ->select('id')
     ->from('drawings')
     ->where('game_id', '=', (string)$game->id)
     ->where('draw_date', '=', $this->pc->options['start_date'])
     ->first();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:13:26