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

如何在同一页面使用带参数的多个Yajra DataTables?

同一页面双Yajra DataTables传参失效的解决方法

问题原因

你当前的写法中,admin_dashboard方法里通过->with()传递的参数仅在首次渲染DataTable HTML时有效,但当DataTable发起AJAX请求到get_datatable1/2接口时,新实例化的DataTable对象并未携带这些参数,且AJAX请求本身也没把参数传递过去,导致查询时无法获取from和to值。

解决步骤

1. 修改AJAX请求配置,携带参数

在DataTable的配置代码中,替换原有的minifiedAjax,改为传递请求参数:

// 以TableOneDataTable为例
->ajax([
    'url' => '/get_datatable1',
    'data' => function(d) {
        // 若参数是页面静态值,直接从视图变量获取
        d.from = '{{ $from }}';
        d.to = '{{ $to }}';
        // 若是用户可动态修改的参数(比如日期选择器),则用JS获取值:
        // d.from = $('#from_date').val();
        // d.to = $('#to_date').val();
    }
])

2. 修改接口方法,接收并传递参数

更新控制器中的get_datatable1和get_datatable2方法,从请求中获取参数后,再传递给DataTable实例:

use Illuminate\Http\Request;

public function get_datatable1(Request $request, TableOneDataTable $dataTable1)
{
    // 从请求中获取参数,默认值设为当前日期
    $from = $request->get('from', date('Y-m-d'));
    $to = $request->get('to', date('Y-m-d'));
    
    return $dataTable1->with(['from' => $from, 'to' => $to])->render('operation.admin_dashboard');
}

public function get_datatable2(Request $request, TableTwoDataTable $dataTable2)
{
    $from = $request->get('from', date('Y-m-d'));
    $to = $request->get('to', date('Y-m-d'));
    
    return $dataTable2->with(['from' => $from, 'to' => $to])->render('operation.admin_dashboard');
}

3. 保留DataTable类的查询逻辑

你当前DataTable类中的query方法无需修改,Yajra的->with()方法会自动将参数绑定到实例属性,$this->from和$this->to可以正常获取值:

public function query(OperationAssignment $model)
{
    return $model->newQuery()
        ->with('created_user:id,first_name,last_name','updated_user:id,first_name,last_name')
        ->where('date','>=',$this->from)
        ->where('date','<=',$this->to);
}

额外说明

如果需要支持用户动态修改日期(比如添加日期选择器),只需在视图中添加对应的表单元素,然后在AJAX的data回调里通过JS获取最新值即可,接口方法会自动接收新参数并更新查询条件。

内容的提问来源于stack exchange,提问作者Woaraka Been Mahbub

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:43:09