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

服务端Yajra DataTable中SearchPanes选项为空问题求助

问题描述

在Yajra DataTable服务端模式下使用SearchPanes功能时,SearchPanes的选项为空,无法正常工作。以下是当前的实现代码:

后端PHP代码

public function getSalesReturnsData()
{
    $sales = Sale::query()
        ->select(DB::raw("Bestelldatum, kLieferscheinPos ,cBestellNr,
            Verkaufsplattform, SKU, GTIN, HAN, Hersteller, Lieferant, cName, 
            Menge, VKPreis, UVP, Farbe, Groesse, Warengruppe, Transaktion, 
            Anmerkung, Lieferland, Versandart, Zahlungsart, VersandkostenBrutto, 
             GutscheinBestellungBrutto"))
        ->where('Bestelldatum', '>', now()->subDays(30)->endOfDay());

    $returns = ProductReturn::query()
        ->select(DB::raw("Retourendatum, kRMRetoure,cBestellNr, Verkaufsplattform, 
            SKU, GTIN, HAN, Hersteller, Lieferant, cName, Menge, VKPreis, UVP, Farbe,
            Groesse, Warengruppe, Transaktion, Anmerkung, Lieferland, Versandart, 
            Zahlungsart, VersandkostenBrutto, GutscheinBestellungBrutto"));

    $results = $sales->unionAll($returns);

    return DataTables::of($results)
        ->addColumn('Bestelldatum', function ($row) {
            $bestelldatum = date("d.m.Y", strtotime($row->Bestelldatum));
            return $bestelldatum;
        })->make(true);
}

前端JavaScript代码

$(document).ready(function () {
    load_data();

    function load_data() {
        $('#datatable').DataTable({
            processing: true,
            serverSide: false,
            ajax: {
                url: "{{ route('getSalesReturnsData') }}"
            },
            "columns": [{
                "data": "Bestelldatum"
            },
                {
                    "data": "kLieferscheinPos"
                },
                {
                    "data": "cBestellNr"
                },
                {
                    "data": "Verkaufsplattform"
                },
                {
                    "data": "SKU"
                },
                {
                    "data": "GTIN"
                },
                {
                    "data": "HAN"
                },
                {
                    "data": "Hersteller"
                },
                {
                    "data": "Lieferant"
                },
                {
                    "data": "cName"
                },
                {
                    "data": "Menge"
                },
                {
                    "data": "VKPreis"
                },
                {
                    "data": "UVP"
                },
                {
                    "data": "Farbe"
                },
                {
                    "data": "Groesse"
                },
                {
                    "data": "Warengruppe"
                },
                {
                    "data": "Transaktion"
                },
                {
                    "data": "Anmerkung"
                },
                {
                    "data": "Lieferland"
                },
                {
                    "data": "Versandart"
                },
                {
                    "data": "Zahlungsart"
                },
                {
                    "data": "VersandkostenBrutto"
                },
                {
                    "data": "GutscheinBestellungBrutto"
                },
            ],
            dom: 'PBfrtip',
            stateSave: true,
            searchPanes: {
                initCollapsed: true,
                cascadePanes: true,
                dtOpts: {
                    paging: 'flase',
                    pagingType: 'simple',
                    select: {
                        style: 'multi'
                    }
                },
                columns: [3, 5, 8, 6, 7, 9, 11, 16]
            }
        });
    }
});
问题分析与解决方案

核心问题点

  • Union查询字段不匹配:Sale表查询的是Bestelldatum,但ProductReturn表查询的是Retourendatum,导致返回数据集的日期字段名混乱,SearchPanes无法正确识别字段值。
  • 服务端模式未启用:前端设置serverSide: false,但实际需要服务端模式,必须改为true;同时后端未配置SearchPanes的服务端支持。
  • 拼写错误:前端searchPanes.dtOpts.paging写成了'flase',应为false。
  • 后端未开启SearchPanes支持:Yajra DataTable需要显式调用->searchPanes()方法来启用服务端的SearchPanes处理逻辑。

修改步骤

1. 修复后端Union查询的字段一致性

将ProductReturn的Retourendatum别名改为Bestelldatum,kRMRetoure别名改为kLieferscheinPos,保证两个查询的字段名完全一致:

$returns = ProductReturn::query()
    ->select(DB::raw("Retourendatum AS Bestelldatum, kRMRetoure AS kLieferscheinPos, cBestellNr, Verkaufsplattform, 
        SKU, GTIN, HAN, Hersteller, Lieferant, cName, Menge, VKPreis, UVP, Farbe,
        Groesse, Warengruppe, Transaktion, Anmerkung, Lieferland, Versandart, 
        Zahlungsart, VersandkostenBrutto, GutscheinBestellungBrutto"));

2. 后端启用SearchPanes服务端支持

在DataTable实例中添加->searchPanes()方法,指定需要生成选项的字段:

return DataTables::of($results)
    ->addColumn('Bestelldatum', function ($row) {
        $bestelldatum = date("d.m.Y", strtotime($row->Bestelldatum));
        return $bestelldatum;
    })
    // 启用SearchPanes服务端处理,指定需要生成选项的字段
    ->searchPanes([
        'columns' => ['Verkaufsplattform', 'GTIN', 'Lieferant', 'HAN', 'Hersteller', 'cName', 'VKPreis', 'Transaktion']
    ])
    ->make(true);

3. 前端修正配置

  • 将serverSide改为true
  • 修复paging拼写错误
  • 确保searchPanes.columns对应正确的列索引:
$('#datatable').DataTable({
    processing: true,
    serverSide: true, // 修正为服务端模式
    ajax: {
        url: "{{ route('getSalesReturnsData') }}"
    },
    "columns": [
        // ... 保持原有列配置不变
    ],
    dom: 'PBfrtip',
    stateSave: true,
    searchPanes: {
        initCollapsed: true,
        cascadePanes: true,
        dtOpts: {
            paging: false, // 修正拼写错误
            pagingType: 'simple',
            select: {
                style: 'multi'
            }
        },
        columns: [3, 5, 8, 6, 7, 9, 11, 16] // 确保索引对应正确字段
    }
});

额外注意事项

  • 确保已引入SearchPanes的CSS和JS文件(本地资源或CDN)
  • 检查数据库中对应字段是否有非空数据,空数据会导致SearchPanes选项为空
  • 对于数值型字段(如VKPreis),可在后端searchPanes配置中添加options回调格式化数值,保证选项显示正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:40:32