如何在数据透视表上应用过滤器?

Posted

技术标签:

【中文标题】如何在数据透视表上应用过滤器?【英文标题】:How to apply filter on pivot table? 【发布时间】:2021-11-11 01:34:25 【问题描述】:

类别模型

public function lists()
    return $this->belongsToMany(Listing::class);

上市模式

public function categories()
    return $this->belongsToMany(Category::class)
        ->withPivot(['category_id','listing_id']); 

控制器:当我 dd 这个查询时,我会得到列表表中的所有列表,但我只想获取那些具有这些类别的列表。

if($request->categories)
    $var = $request->categories; // data in array 1,2,3
    $lists = Listing::with(['categories' => function ($query) use($var) 
        $query->whereIn('category_id',$var);
    ])->get();
    dd($lists);

【问题讨论】:

这看起来像是一个错字:whereIn('category_id',['=',$var])。 The docs show the correct syntax,所以像 whereIn('category_id', $var) 这样的东西应该是正确的。 顺便说一句:belongsToMany(listing::class) - 显然有效,但模型名称应正确大写:belongsToMany(Listing::class) @Don'tPanic 如果您对此问题有任何答案,那么最好不要投反对票并纠正不属于我的问题的语法。 您发布的代码有错误。我指出了这些错误并描述了如何为您修复它们。如果你在这里写的不是实际上你的代码......好吧,对不起,我的读心术今天似乎不起作用。祝你好运。 【参考方案1】:

这段代码运行良好

 $state=$request->state;
    $type=$request->type;
    $categories=$request->categories;
    if(!$request->all()==null)
        $lists = Listing::when($state!=Null,function ($query) use ($state) 
            return $query->where('state', $state);)->
        when($type!=Null,function ($query) use ($type) 
            return $query->where('type', $type););
       if(!$categories==null)
           foreach($categories as $var)
               $lists->whereHas('categories',function($q) use($var)
                   $q->where('category_id',$var);
               );
           
       
     $lists=$lists->get();
    

【讨论】:

【参考方案2】:

给你的桌子一些 id 名字

<table id="userTable" style="display: table;" class="table table-responsive text-center table-striped table-hover">

然后使用以下脚本:

<script type="text/javascript">
    
    $(document).ready(function() 
    var table = $('#userTable').DataTable( 
        scrollY:        "400px",
        scrollX:        true,
        scrollCollapse: true,
        paging:         true,
        columnDefs: [ 
            sortable: false,
            "class": "index",
            targets: 0
         ],
        order: [[ 4, 'dsc' ]],
        fixedColumns: true
     );
 
    table.on( 'order.dt search.dt', function () 
        table.column(0, search:'applied', order:'applied').nodes().each( function (cell, i) 
            cell.innerhtml = i+1;
         );
     ).draw();
 );


   </script>

现在您必须能够搜索、过滤、重新排序您的表格。

【讨论】:

以上是关于如何在数据透视表上应用过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

Excel 2013 - 在基于 OLAP 的数据透视表上更改页面过滤器时记录的宏错误

如何使用或过滤器从 Excel 中的 OLAP 多维数据集数据透视表中获取数据

同步数据透视表 - VBA 代码不起作用

如何在熊猫数据透视表上添加列(多列)

使用表格从数据透视表中过滤数据

数据透视表上的t-sql辅助数据透视表