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

基于Laravel与Ajax实现按日期筛选关联表数据并展示至DataTable

我来帮你梳理并修正这个日期筛选+关联表查询的问题,完美适配DataTable的展示需求:

第一步:修正控制器datewise方法的语法错误与逻辑完善

你原代码里的赋值语法完全错误,而且关联查询的条件不完整,同时缺少track_first_status的筛选逻辑。我结合需求给出修正后的完整代码,你可以根据实际表结构微调:

public function datewise(Request $request)
{
    // 先验证前端传入的日期参数,避免无效数据
    $request->validate([
        'start_date' => 'required|date',
        'end_date' => 'required|date|after_or_equal:start_date',
    ]);

    // 获取日期筛选参数
    $startDate = $request->input('start_date');
    $endDate = $request->input('end_date');

    // 构建关联查询:关联两张表,按track_first_status筛选,同时限定日期范围
    $datewiseData = DB::table('registrations')
        // 替换成你实际的关联字段(比如registrations的主键是registration_id,就对应ssi_tracks的registration_id)
        ->join('ssi_tracks', 'registrations.id', '=', 'ssi_tracks.registration_id')
        // 根据需求调整track_first_status的筛选规则,比如等于某个状态、非空等
        ->where('ssi_tracks.track_first_status', '<>', '')
        // 替换成你实际用来筛选的日期字段(比如registrations的submit_date、created_at等)
        ->whereBetween('registrations.created_at', [$startDate, $endDate])
        // 选择需要展示的字段,按需增减
        ->select('registrations.*', 'ssi_tracks.track_first_status')
        ->get();

    // 返回DataTable需要的JSON格式数据
    return response()->json([
        'data' => $datewiseData
    ]);
}

关键说明:

  • 删掉了原方法里多余的$data_end和$data_start参数,直接从Request对象获取前端参数更合理
  • 关联字段必须和你数据库的实际外键对应,别直接抄示例代码,要自己核对表结构
  • 日期筛选字段如果不是created_at,记得换成业务里实际用的日期字段(比如报名提交日期)
  • track_first_status的筛选条件可以灵活调整,比如要筛选特定状态就写成->where('ssi_tracks.track_first_status', '=', '已完成')
第二步:配合DataTable前端配置

假设你用的是jQuery DataTable,前端可以这样配置来实现日期筛选+表格刷新:

$(document).ready(function() {
    // 初始化DataTable
    const registrationTable = $('#registrationTable').DataTable({
        processing: true,
        serverSide: false, // 如果需要服务端分页/排序,改成true并结合Laravel的DataTables包处理
        ajax: {
            url: '/registrations/datewise', // 替换成你的控制器路由地址
            type: 'POST',
            data: function(d) {
                // 把日期选择器的值传给后端
                d.start_date = $('#startDatePicker').val();
                d.end_date = $('#endDatePicker').val();
            },
            // 携带CSRF令牌,避免Laravel的CSRF验证报错
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        },
        // 配置表格列,对应后端返回的字段
        columns: [
            { data: 'id', title: '报名ID' },
            { data: 'name', title: '报名人姓名' },
            { data: 'track_first_status', title: '跟踪状态' },
            // 其他需要展示的列,按需添加
        ]
    });

    // 日期选择器变化时,自动刷新表格
    $('#startDatePicker, #endDatePicker').on('change', function() {
        registrationTable.ajax.reload();
    });
});
第三步:配置路由

在routes/web.php里添加对应的POST路由:

use App\Http\Controllers\YourRegistrationController; // 替换成你的实际控制器类名

Route::post('/registrations/datewise', [YourRegistrationController::class, 'datewise'])->name('registrations.datewise');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:43