Laravel-excel: [์งˆ๋ฌธ] ํ—ˆ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ. ๋ฒ„๊ทธ์ธ๊ฐ€?

์— ๋งŒ๋“  2020๋…„ 03์›” 10์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Maatwebsite/Laravel-Excel

์ „์ œ ์กฐ๊ฑด

๋ฒ„์ „

  • PHP ๋ฒ„์ „ : 7.1
  • Laravel ๋ฒ„์ „ : 5.5. *
  • ํŒจํ‚ค์ง€ ๋ฒ„์ „ : ^ 3.0

๊ธฐ์ˆ 

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค
image

์ถ”๊ฐ€ ์ •๋ณด

memory_limit = 1536M-๋” ์„ค์ •ํ•  ์ˆ˜ ์—†์Œ
๋‚ด ์ฝ”๋“œ
image

Excel::download(new ReportExport($data), 'excel.xlsx');

$data 500000 ๊ฐœ์˜ ํ–‰์œผ๋กœ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ +
๊ทธ๋ ‡๊ฒŒ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@fedeisas ์‚ฌ์šฉ ๋Œ€๊ธฐ์—ด์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
Return value of Maatwebsite\Excel\QueuedWriter::exportCollection() must be an instance of Illuminate\Support\Collection, instance of Illuminate\Support\LazyCollection returned
ํ•˜์ง€๋งŒ Excel :: download๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  8 ๋Œ“๊ธ€

๋ณด๊ธฐ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ PHP ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” 500000 ํ–‰์ด FromView ์ „๋žต์— ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ๊ฐ€ ์ทจํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค : https://stefanzweifel.io/posts/lazy-collections-in-laravel-excel/

๋ณด๊ธฐ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ PHP ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” 500000 ํ–‰์ด FromView ์ „๋žต์— ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ๊ฐ€ ์ทจํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค : https://stefanzweifel.io/posts/lazy-collections-in-laravel-excel/

Laravel ๋ฒ„์ „ 5.5. *๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— cursor ()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด๋Ÿฌํ•œ ๊ณ„์‚ฐ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— PHP์˜ ๊ณ„์‚ฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์ƒ์„ฑ๊ธฐ Excel ํŒŒ์ผ์— ์ œ๊ณตํ•˜๊ธฐ ์ „์— 500,000 ํ–‰์˜ ๋ฐฐ์—ด์„ ๊ฐ–๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

@patrickbrouwers ๊ธฐ์‚ฌ์—์„œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์–ป์Šต๋‹ˆ๋‹ค.

Return value of Maatwebsite\Excel\QueuedWriter::exportCollection() must be an instance of Illuminate\Support\Collection, instance of Illuminate\Support\LazyCollection returned

@fedeisas ์–ด๋–ค ๋ฒ„์ „์˜ laravel์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”.

laravel/framework                            v6.18.1            The Laravel Framework.
maatwebsite/excel                            3.1.19             Supercharged Excel exports and imports in Laravel
phpoffice/phpspreadsheet                     1.11.0             PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine

ํ๋œ ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋ฌธ์ œ์ผ๊นŒ์š”?

๋ถ„์‚ฐ ์ž‘์—…์ž (S3 ์‚ฌ์šฉ)์—์„œ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ ํ•˜๋Š”๋ฐ FromQuery ๊ฐ€ ๊ณ ํ†ต์Šค๋Ÿฝ๊ฒŒ ๋Š๋ฆฝ๋‹ˆ๋‹ค (3 ๋งŒ ํ–‰ ๋‚ด๋ณด๋‚ด๊ธฐ์˜ ๊ฒฝ์šฐ 1 ์‹œ๊ฐ„).

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์šด์—†์ด ๊ฒŒ์œผ๋ฅธ ์ปฌ๋ ‰์…˜๊ณผ cursor() ๋กœ ์ „ํ™˜ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

@fedeisas ์‚ฌ์šฉ ๋Œ€๊ธฐ์—ด์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
Return value of Maatwebsite\Excel\QueuedWriter::exportCollection() must be an instance of Illuminate\Support\Collection, instance of Illuminate\Support\LazyCollection returned
ํ•˜์ง€๋งŒ Excel :: download๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ FromQuery ๊ด€์‹ฌ์‚ฌ ๋˜๋Š” 512M ๋ฉ”๋ชจ๋ฆฌ ์„ค์ •์œผ๋กœ LazyCollection์œผ๋กœ 60K ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ ์„ค์ •์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
https://stefanzweifel.io/posts/lazy-collections-in-laravel-excel/

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰