【问题标题】:Maatwebsite excel Serialization of 'PDO' is not allowedMaatwebsite excel 不允许对“PDO”进行序列化
【发布时间】:2021-12-12 16:54:25
【问题描述】:

我正在尝试在 s3 上的队列中导出大数据,并且不允许序列化“PDO”异常/这是我的代码:

控制器

            $transactions = Transaction::query()
        ->with([
            'user',
            'user.profile',
            'senderUser',
            'receiverUser',
            'senderUser.roles',
            'receiverUser.roles'
        ])->filterByUser()
        ->filter($filters)
        ->orderByDesc('created_at');

    if (request()->export_transactions){
        (new TransactionsExport(auth('sanctum')->user(),$transactions))->store('transactions-exports/' . now()->format('d:m:Y') . '.csv', 's3', \Maatwebsite\Excel\Excel::CSV);

        return response()->json('Export started');
    }

导出文件

    class TransactionsExport implements FromQuery, WithMapping, WithHeadings, WithCustomQuerySize, ShouldQueue
{
    use Exportable;

    private $user;
    private $transactions;

    public function __construct(User $user, $transactions)
    {
        $this->user = $user;
        $this->transactions = $transactions;
    }

    /**
    * @return Builder
    */
    public function query()
    {
        return $this->transactions;
    }

    public function querySize(): int
    {
        return $this->transactions->count();
    }


    public function headings(): array
    {
        return [
          //headings
        ];
    }
    public function prepareRows($transactions): array
    {
        //code here
    }

    public function map($transaction): array
    {
        //code here
     
    }
}

我也尝试像这样触发它(使用额外的参数,没有和使用不同的允许方法(存储、下载等))

(new TransactionsExport(auth('sanctum')->user(),$transactions))->queue('transactions-exports/' . now()->format('d:m:Y') . '.csv', 's3', \Maatwebsite\Excel\Excel::CSV);

另外,我尝试将 Transaction::query() 直接移动到导出文件中的查询方法。 也没有帮助 toSql() 方法(出现字符串异常时调用成员函数 count())

不知道我做错了什么。感谢您的帮助。

【问题讨论】:

    标签: excel laravel laravel-8 maatwebsite-excel


    【解决方案1】:

    我已经通过删除构造函数中的类注入解决了这个问题,它在作业中是不允许的(队列/如果你需要一个类的对象,最好像new Class()一样调用它),现在一切正常很好。

    【讨论】:

      猜你喜欢
      • 2017-12-22
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2022-06-10
      • 1970-01-01
      • 2019-02-23
      • 2014-04-21
      相关资源
      最近更新 更多