亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel Excel 排隊導出不會創造工作

Laravel Excel 排隊導出不會創造工作

PHP
小唯快跑啊 2022-06-17 16:40:55
我正在嘗試讓排隊的導出與 Laravel Excel 包一起使用,但無法弄清楚我缺少什么。我遵循了有關如何排隊導出的文檔,但是當我對其進行測試時,導出在第一批導出后完成,因此在前 1000 行之后。我將我的應用程序設置為使用.env 中的數據庫驅動程序并生成/運行遷移。我正在使用 Laravel 5.8、Laravel Excel 3.1、PHP 7.2、Postgresql 10。這是我目前所擁有的基本版本:控制器public function export(Request $request){    $name = 'test.csv';    (new ExcelExport($client, $year))->queue('public/exports/' . $name)->chain([        new NotifyUserOfExport($request->user(), $name),    ]);    return back()->with('message', 'This export will take some time. You will receive an email when it is ready to download.');}出口類class ExcelExport implements FromQuery, WithHeadings, WithMapping, WithStrictNullComparison{    use Exportable;    public function __construct($client, $year)    {        $this->year = $year;        $this->client = $client;    }    public function query()    {        $query = $this->getQuery();        return $query;    }    public function headings(): array    {        //...    }    public function map($row): array    {        //....    }    private function getQuery()    {        return \DB::table('mytable')                  ->where('year', $this->year)                  ->where('client', $this->client)                  ->orderBy('created_at')                  ->groupBy('column');    }我的隊列.phpreturn [    'default' => env('QUEUE_CONNECTION', 'sync'),    'connections' => [        'sync' => [            'driver' => 'sync',        ],        'database' => [            'driver' => 'database',            'table' => 'jobs', // also tried 'myschema.jobs'            'queue' => 'default',            'retry_after' => 90,        ],        //.....    ],我的 .envQUEUE_CONNECTION=database我認為沒有任何其他相關的代碼。我收到了應該在所有作業完成后發送的通知,但就像我之前提到的,它是在第一批完成后發送的。數據庫中的作業表中也沒有插入作業,因此存在問題。我只是無法弄清楚我錯過了什么。我應該提到我不想使用Implicit Export queuing,因為同樣的導出用于應用程序的另一部分,它只需要導出幾行,所以我不需要排隊。任何幫助,將不勝感激。
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

事實證明,因為我的查詢有一個 groupBy 子句,我需要在導出類上實現自定義查詢大小。我不明白為什么這是一個問題,但是在我添加之后,作業被添加到隊列中并且處理得很好。所以我補充說:


    use Maatwebsite\Excel\Concerns\WithCustomQuerySize;


    class ExcelExport implements ...., WithCustomQuerySize


    //......


    public function querySize(): int

    {

        $query = //......


        $size = $query->count();

        return $size;

    }

我希望這對某人有所幫助,這樣他們就不必經歷我所做的頭痛。


查看完整回答
反對 回復 2022-06-17
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

排隊的可導出文件以塊的形式處理;每個塊都是由 QueuedWriter 推送到隊列的作業。對于實現 FromQuery 問題的可導出文件,作業數是通過將 $query->count() 除以塊大小來計算的。

#何時使用

根據 query() 方法的實現(例如,當使用 groupBy 子句時),前面提到的計算可能不正確。

如果是這種情況,您應該使用 WithCustomQuerySize 關注點來提供查詢大小的自定義計算。

在此處閱讀更多信息https://docs.laravel-excel.com/3.1/exports/queued.html#when-to-use


查看完整回答
反對 回復 2022-06-17
  • 2 回答
  • 0 關注
  • 221 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號