首页 > 解决方案 > 不允许序列化 'Doctrine\DBAL\Driver\PDOConnection'

问题描述

我正在做一个项目,我做了一个可导出的类,这就是类

 <?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithMapping;
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\Excel\Concerns\WithHeadings;

class ExcelExport implements FromQuery, WithMapping, WithHeadings
{
   use Exportable;

   private $query;

   public function __construct($query)
   {
       $this->query = $query;
   }

   public function query()
   {
       return $this->query;
   }

   public function headings():array
   {
       $return = [
           'H1',
           'H2',
       ];

       return $return;
   }

   public function map($row):array
   {
       $return = [];
       foreach ($row->relation as $rel) {
           $return[] = $rel->column;
       }
       return $return;
   }
}

并将其称为我的控制器

public function export(Request $request, string $type = 'excel')
    {
        // returns Builder
        $query = $this->service->findByReportable($request, 1);
        
        $file = new ExcelExportLead($query);


        if ($file){
            switch (strtolower($type)) {
                case 'pdf':
                    $file_name = 'export-' . time() . '.pdf';
                    // OriginExcel refers to 'Maatwebsite\Excel\Excel'
                    return $file::queue($file, $file_name, OriginExcel::DOMPDF);
                    break;
                
                default:
                    $file_name = 'export-' . time() . '.xls';
                    return $file->queue($file_name);
                    break;
            }
            
        } else{
            return back()->withErrors(__('common.Sorry But there Was an issue in exporting Data please try again'));
        }

但是出现的错误是'不允许'Doctrine\DBAL\Driver\PDOConnection'的序列化'

我不知道如何解决我用过SerializesModels但它没有解决问题

标签: phplaraveleloquentmaatwebsite-excel

解决方案


序列化它是一种工具,您可以将变量/对象编码为文本(或二进制)表示,然后将该变量移动到另一个线程/进程。

根本问题在于 Builder 对象具有 PDOConnection 属性(与数据库的连接),并且根据定义,这些对象无法序列化,因为它们通常是操作系统中的文件描述符,无法移动到另一个进程/线。

解决方案应遵循以下任一路线


推荐阅读