【问题标题】: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 如果您对此问题有任何答案,那么最好不要投反对票并纠正不属于我的问题的语法。
  • 您发布的代码有错误。我指出了这些错误并描述了如何为您修复它们。如果你在这里写的不是实际上你的代码......好吧,对不起,我的读心术今天似乎不起作用。祝你好运。

标签: laravel-5 eloquent query-builder


【解决方案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>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 2016-07-08
      • 1970-01-01
      • 2019-09-17
      • 2020-01-18
      • 2020-05-08
      相关资源
      最近更新 更多