php - 不允许序列化 'Doctrine\DBAL\Driver\PDOConnection'
问题描述
我正在做一个项目,我做了一个可导出的类,这就是类
- 我正在向“Illuminate\Database\Eloquent\Builder”的导出类型发送查询
<?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
但它没有解决问题
解决方案
序列化它是一种工具,您可以将变量/对象编码为文本(或二进制)表示,然后将该变量移动到另一个线程/进程。
根本问题在于 Builder 对象具有 PDOConnection 属性(与数据库的连接),并且根据定义,这些对象无法序列化,因为它们通常是操作系统中的文件描述符,无法移动到另一个进程/线。
解决方案应遵循以下任一路线
- 使用 builder->toSql() 方法将查询作为字符串发送到 ExcelExport
- 以其他方式对查询进行编码(IE anourvalar/eloquent-serialize https://packagist.org/packages/anourvalar/eloquent-serialize)。
推荐阅读
- python-3.x - 在 Amazon Linux 上写入 txt 文件时,Python '\n' 不起作用
- html - 无论屏幕大小如何,使用 CSS 将 flex 元素居中
- angular - 带有 debounceTime 的 Angular HttpClient 请求不等待到期时间
- xaml - 为什么在这种情况下嵌套的 FlexLayout 不可见?
- reactjs - 将 React 组件挂载到客户端
- javascript - 可以修改但不能替换方法的原型?
- spring-boot - Spring Boot - 方法被多次调用
- sql-server - 将 nvarchar(max) 值与列进行比较
- c# - WEB API HTTP 标头
- r - 如何用 R 代码编织 Rmd 文件以生成 word 文档