Search code examples
laravelexportlaravel-8laravel-excel

Laravel Excel : error Resource interpreted as Document but transferred with MIME


Laravel Excel to export data will download empty data with only headers in excel sheet! I want to export only the filtered data from my search using excel but it will download an empty excel sheet only with headers!! please can anyone tell me where is my error!

DealerExportSearch.php

class DealersSearchExport implements FromCollection, WithHeadings, ShouldAutoSize, WithEvents
{
    use Exportable;

    protected $name;
    protected $email;
    protected $mobile_no;
    protected $city;

    public function __construct( $name, $email, $mobile_no , $city)
    {
        $this->name         = $name;
        $this->email        = $email;
        $this->mobile_no    = $mobile_no;
        $this->city         = $city;
    }
     
    //function select data from database
    public function collection()
    {
        return Dealer::select()->where('name', $this->name)
                                ->where('email', $this->email)
                                ->where('mobile_no', $this->mobile_no)
                                ->where('city', '=', $this->city) //i tried using the above and this also same result
                                ->get();
    }
    
    public function registerEvents(): array
    {
        return [
            AfterSheet::class    => function (AfterSheet $event) {
                $cellRange = 'A1:W1'; // All headers
                $event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(12);
            },
        ];
    }

    //function header in excel
    public function headings(): array
    {
        return [
             'No',
             'name',
             'email',
            'mobile_no',
            'shop_name',
            'city',
            'address'
        ];
    }
}

my controller

public function index(Request $request)

{
 $method = $request->method();
        if ($request->isMethod('get')) {

            $name       = $request->name;
            $email      = $request->email;
            $city       = $request->city;
            $mobile_no  = $request->mobile_no;

            if ($request->has('search')) {
                $dealers = Dealer::where('name', 'LIKE', '%'.$name.'%')
                            ->where('email', 'LIKE', '%'.$email.'%')
                            ->where('mobile_no', 'LIKE', '%'.$mobile_no.'%')
                           ->where('city', 'LIKE', '%'.$city.'%')
                            ->paginate(5);
                return view('dealer.index', compact('dealers'));
            }
            elseif ($request->has('exportSearchExcel')) {
                return Excel::download(new DealersSearchExport($name ?? '', $email ?? '', $mobile_no ?? '', $city ?? ''), 'DealersSearchExcel-reports.xlsx');
            }
            else{
           $dealers = Dealer::orderBy('id', 'DESC')->paginate(5);
            return view('dealer.index', compact('dealers'));
            }
        }
    }

blade

<form action="{{ route('dealer.index') }}" method="GET"  enctype="multipart/form-data">
        @csrf
        <div class="form-group row">
            <div class="col-sm-3">
                <label for="name">Name: </label>
                <input class="form-control" name="name" value="{{ request()->input('name') }}" type="text" placeholder="The Dealer Name">
            </div>
         .....................................................................
            </div>
            <div class="col-md-12 pt-3 text-right">
                <button type="submit" name="search" class="btn btn-primary"><i class="fa fa-fw fa-search"></i> Search</button>
                <button type="submit" name="exportSearchExcel" class="btn btn-secondary text-light"><i class="fa fa-download"></i> Export Excel  </button>                
            </div>
        </div>

No error is showing just in my console it will return this error and download an empty xslx whenever I press the export button.

Resource interpreted as Document but transferred with MIME type application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: "http://127.0.0.1:8000/dealer?_token=TTlpqFNn4hr5rwI1jSlt0d4mbtww2moO8i1WWjfn&name=&email=&mobile_no=&exportSearchExcel=".


Solution

  • Update

    I fixed it by changing my query in DealerExportSearch.php to the same query that I have in controller then it worked

    DealerExportSearch.php

    class DealersSearchExport implements FromCollection, WithHeadings, ShouldAutoSize, WithEvents , WithMapping
    {
    //the above codes not changed till the collection function
    
        //function select data from database
        public function Collection()
        {
            return Dealer::where('name', 'LIKE', '%'.$this->name.'%')
                                ->where('email', 'LIKE', '%'.$this->email.'%')
                                ->where('mobile_no', 'LIKE', '%'.$this->mobile_no.'%')
                               ->where('city', 'LIKE', '%'.$this->city.'%')
                                ->get();
    
        }
    
     public function map($row): array{
               $fields = [
                  $row->id,
                  $row->name,
                  $row->gender,
                  $row->date_of_birth,
                  $row->email,
                  $row->mobile_no,
                  $row->shop_name,
                  $row->city,
                  $row->address,
             ];
            return $fields;
        }
    
    
    ///below codes not changed .....