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

Laravel中GET请求传递日期无法查询数据库数据问题

GET请求传日期查新闻无结果的问题排查与解决

我通过GET请求传递日期获取对应新闻数据,发起的请求链接是 http://127.0.0.1:8000/api//news/search/"2022-05-10",但数据库里明明存在2022-05-10的新闻数据,却始终查询不到结果。

控制器代码

public function getNewsDate($dates) {
    $news = News::where('date', $dates)->get();
    if ($news) {
        return response()->json($news, 200);
    } else {
        return response()->json('News not found', 404);
    }
}

问题原因及解决办法

1. 请求参数带多余引号

请求链接里的日期被双引号包裹("2022-05-10"),导致控制器接收的$dates参数值是"2022-05-10",和数据库中存储的纯日期字符串2022-05-10不匹配,自然查不到数据。

  • 解决:把链接改成 http://127.0.0.1:8000/api/news/search/2022-05-10,同时去掉链接里的双斜杠api//news(部分框架会自动忽略,但规范写法用单斜杠)。

2. 集合判断逻辑错误

News::where()->get()返回的是Eloquent集合,哪怕没有数据,集合对象也不为空,所以if ($news)永远为true,不会触发404返回。

  • 解决:改用isNotEmpty()方法判断集合是否有数据:
    public function getNewsDate($dates) {
        $news = News::where('date', $dates)->get();
        if ($news->isNotEmpty()) {
            return response()->json($news, 200);
        } else {
            return response()->json('News not found', 404);
        }
    }
    

3. 日期字段类型不匹配

如果数据库中date字段是datetime/timestamp类型(存储值类似2022-05-10 14:30:00),直接用where('date', $dates)精确匹配纯日期字符串会失败,因为带时间部分。

  • 解决:使用whereDate()方法只匹配日期部分:
    $news = News::whereDate('date', $dates)->get();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:27:36