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

Laravel归档数据查询异常:无法正确获取数据库数据求助

Laravel归档数据获取问题修复方案

问题排查

你的代码存在三处核心问题导致数据无法返回:

  1. 视图链接与路由规则不匹配:路由定义的是参数式URL(detailsarchive/{m}/{y}),但视图生成的是查询字符串格式,还存在语法错误(&. y里的多余点和空格),导致控制器无法正确接收$m和$y参数。
  2. 控制器条件判断错误:if($y = request('year'))使用了赋值运算符=而非比较运算符==,且完全没必要通过request获取年份——路由已经传递了$y参数。
  3. 月份格式不兼容:视图传递的是英文月份名(如August),但Laravel的whereMonth方法默认匹配的是数字月份(1-12),直接查询会无匹配结果。

修复代码

1. 修复视图代码

使用Laravel路由助手生成符合规则的链接,避免手动拼接URL的错误:

@foreach ($archive as $data)
    <p>
        <a href="{{ route('detailsarchive', ['m' => $data['month'], 'y' => $data['year']]) }}">
            {{ $data['month'] . $data['year'] }}
        </a>
    </p>
@endforeach

2. 修复控制器代码

将月份名称转换为数字,简化查询逻辑,直接使用路由传递的参数:

public function detailsarchive($m, $y)
{
    // 将英文月份名转换为数字(例如:August → 8)
    $monthNumber = \Carbon\Carbon::parse($m)->month;

    $posts = Journalform::latest()
        ->whereMonth('created_at', $monthNumber)
        ->whereYear('created_at', $y)
        ->get();

    return view('Frontend.Date.allviewpost', compact('posts'));
}

3. 路由代码保持不变

你的路由定义是正确的,无需修改:

Route::get('detailsarchive/{m}/{y}/', [FrontendController::class, 'detailsarchive'])->name('detailsarchive');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:33:15