Laravel,两列之间的日期范围过滤器

Posted

技术标签:

【中文标题】Laravel,两列之间的日期范围过滤器【英文标题】:Laravel, Date range filter between two column 【发布时间】:2022-01-03 13:53:48 【问题描述】:

您好,我想从两个不同的列中过滤日期范围,这是我当前的过滤日期:

$(document).ready( function()
         $.fn.dataTable.ext.search.push(
                function (settings, data, dataIndex)
                    var datepicker_to = $('#datepicker_to').datepicker("getDate");
                    var datepicker_from = $('#datepicker_from').datepicker("getDate");
                    var startDate = new Date(data[20]);

                    if (datepicker_from == null && datepicker_to == null) return true; 
                    if (datepicker_from == null && startDate <= datepicker_to) return true; 
                    if (datepicker_to == null && startDate >= datepicker_from) return true; 
                    if (startDate <= datepicker_to && startDate >= datepicker_from) return true; 
                    return false;
                
            );

            $('#datepicker_from, #datepicker_to').change(function() 
                    tableMediaOrder.draw();
                );
            );

到目前为止,我只能从一列中过滤日期范围,其中被过滤的列是 Date(data[20]); 列,即 created_at 列,有没有办法像我的情况一样过滤两列之间的日期范围是 @ 987654326@和periode_end?

这是专栏:

谢谢!

更新: 这是我的controller.php

public function index(Request $request)


    if ($request->ajax()) 
        if(auth()->user()->is_admin)
            $data = MediaOrder::get();
        else
            $data = MediaOrder::memberOf(auth()->user()->group_id)->get();>get('group_idUser'))->get();
        
        return DataTables::of($data)
                ->addIndexColumn()
                ->addColumn('action',function($row)
                    $btn = '<a style="margin:5px" href="javascript:void(0)" id="viewMediaOrder" data-toggle="tooltip"  data-id="'.$row->id.'" data-original-title="View" class="edit btn btn-primary btn-sm button1 viewMediaOrder" value=" csrf_token() "><i class="fa fa-eye mr-1"></i>View</a>';


                    if(!$row->isdisabled)
                        $btn = $btn.'<a style="margin:5px" href="javascript:void(0)" id="editMediaOrder" data-toggle="tooltip"  data-id="'.$row->id.'" data-original-title="Edit" class="edit btn btn-warning btn-sm button1 editMediaOrder" value=" csrf_token() "><i class="fa fa-pencil mr-1"></i>Edit</a>

                        <a style="margin:5px" href="javascript:void(0)" data-toggle="tooltip" id="disableMediaOrder"  data-id="'.$row->id.'" data-original-title="Delete" class="btn btn-danger btn-sm button1 disableMediaOrder" value=" csrf_token() "><i class="fa fa-power-off mr-1"></i>Disable</a>';

                    

                        return $btn;
                )
                ->rawColumns(['action'])
                ->make(true);
     else 

        \Meta::set('title', 'Media Order');
        $groups = Group::all();
        $media_order = DB::table('media_order')->get();
        $moo = MediaOrder::get();
        $users = User::orderBy('name', 'asc')->get();
        return view('media-order.index')->with(compact('users','moo','groups'));
    

【问题讨论】:

你能分享你的控制器代码 我已经更新了我的问题,但主要是我使用 jquery 作为我的过滤器,而不是来自我的索引 所以你需要在数据表端而不是服务器端过滤吗? 是的,类似的 【参考方案1】:

就这样吧

$query->whereDate('periode_start', '>=', $datepicker_from)
->whereDate('periode_end', '<=', $datepicker_to);

现在您可以在两列之间获得过滤日期范围

【讨论】:

以上是关于Laravel,两列之间的日期范围过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Django过滤列之间的日期差异

Jquery 数据表日期范围过滤器

Postgres tsrange,按日期和时间过滤

如何过滤日期

Laravel 数组过滤

如何在 Laravel Eloquent 上过滤相关模型