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

Laravel+Yajra Datatables:循环生成日期列及数组传参问题

解决方案

1. 循环自动生成Day 1到Day 31的列

前端(JavaScript)

在Datatables初始化时,通过循环动态构建columns数组,无需手动逐个添加:

$(document).ready(function() {
    // 先定义固定列,比如基础信息列
    let columns = [
        { data: 'name', title: '姓名' },
        { data: 'employee_id', title: '员工ID' }
    ];

    // 循环生成Day 1到Day 31的列配置
    for (let i = 1; i <= 31; i++) {
        columns.push({
            data: `day_${i}`,
            title: `Day ${i}`,
            // 可按需添加排序、搜索等配置
            sortable: false,
            searchable: false
        });
    }

    // 初始化Datatables
    $('#datatable').DataTable({
        processing: true,
        serverSide: true,
        ajax: {
            url: '/your-datatables-endpoint',
            type: 'POST',
            data: function(d) {
                // 传递数组格式的tgl参数示例
                d.tgl = ['2024-05-01', '2024-05-02', '2024-05-31'];
            }
        },
        columns: columns
    });
});

后端(Laravel控制器)

在Yajra Datatables逻辑中,动态给数据集添加Day 1到Day 31的字段:

use Yajra\DataTables\Facades\DataTables;
use Illuminate\Http\Request;

public function loadDatatableData(Request $request)
{
    $employees = \App\Models\Employee::query();

    return DataTables::of($employees)
        ->addColumn('name', fn($employee) => $employee->name)
        ->addColumn('employee_id', fn($employee) => $employee->employee_id)
        // 循环生成每日数据字段
        ->addColumns(function($employee) {
            $dayFields = [];
            for ($i = 1; $i <= 31; $i++) {
                // 这里替换为你的业务逻辑,比如获取当日考勤状态
                $status = \App\Models\Attendance::where('employee_id', $employee->id)
                    ->whereDay('record_date', $i)
                    ->value('status') ?? '无记录';
                $dayFields["day_{$i}"] = $status;
            }
            return $dayFields;
        })
        ->rawColumns(array_merge(['name', 'employee_id'], array_map(fn($i) => "day_{$i}", range(1, 31))))
        ->make(true);
}

2. Ajax传递数组格式的tgl参数完全可行

  • 前端:直接在ajax.data中传入数组即可,示例中d.tgl = ['2024-05-01', ...],POST/GET请求都支持。
  • 后端:Laravel可直接通过$request->input('tgl')获取数组,后续可直接用于查询或逻辑处理:
$dateList = $request->input('tgl');
// 示例:用数组作为查询条件
$records = \App\Models\Attendance::whereIn('record_date', $dateList)->get();

如果是GET请求,Datatables会自动将数组格式化为tgl[]=2024-05-01&tgl[]=2024-05-02的形式,Laravel依然能正确解析为数组,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:43