【问题标题】:Exporting to Excel based on filter with Laravel使用 Laravel 基于过滤器导出到 Excel
【发布时间】:2021-12-11 15:06:03
【问题描述】:

我正在开发一个视图,该视图允许用户选择员工然后选择日期范围,当他们单击过滤器按钮时,它只会显示该员工在该日期期间的记录。我有这个工作,但我想为该员工和范围实现导出到 excel 的功能,但是当我单击导出时,我的所有记录都会导出到 excel。有谁知道正确的方向是什么?

控制器:

 public function exportvehicles()
    {
        return Excel::download(new ExportV, 'users.xlsx');
    }

型号:

class ExportV implements FromCollection
{
    public function collection()
    {
        $startDate = request()->input('startDate', '2021-01-01');
        $endDate = request()->input('endDate', '2021-12-12');
        return VehicleLog::join('vehicle', 'vehicleslog.vehicle_id', '=', 'vehicle.id')
            ->join('smsstaff', 'vehicleslog.smsstaff_key', '=', 'smsstaff.smsstaff_key')
            ->when(request()->input('smsstaff_key'), function ($query) {
                $query->where('smsstaff.smsstaff_key', request()->input('smsstaff_key'));
            })
            ->whereDate('log_dt', '>=', $startDate)
            ->whereDate('log_dt', '<=', $endDate)
            ->get();
    
    }
}

【问题讨论】:

    标签: php laravel laravel-8 maatwebsite-excel


    【解决方案1】:

    您可以在将控制器发送到 ExportV 之前对其进行查询,这将使您轻松实现多种类型的过滤器。

    控制器:

    public function exportvehicles()
    {
       $startDate = request()->input('startDate', '2021-01-01');
       $endDate = request()->input('endDate', '2021-12-12');
       $item = VehicleLog::join('vehicle', 'vehicleslog.vehicle_id', '=', 'vehicle.id')
                ->join('smsstaff', 'vehicleslog.smsstaff_key', '=', 'smsstaff.smsstaff_key')
                ->when(request()->input('smsstaff_key'), function ($query) {
                    $query->where('smsstaff.smsstaff_key', request()->input('smsstaff_key'));
                })
                ->whereDate('log_dt', '>=', $startDate)
                ->whereDate('log_dt', '<=', $endDate)
                ->get();
       return Excel::download(new ExportV($item), 'users.xlsx');
    }
    

    ExcelV:

    class ExcelV implements FromCollection
    {
      protected $item;
      function __constuct ($item) {
        $this->item = $item;
      }
      public function collection() {
        return $this->item;
      }
    }
    

    【讨论】:

    • 我收到 Call to a member function all() on null 错误。知道为什么吗?
    • all() 来自哪里。如果是来自 excelV,我建议你使用 FromArray 而不是 FromCollection
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多