[{"data":1,"prerenderedAt":2410},["ShallowReactive",2],{"navigation":3,"\u002Factions-and-metrics\u002Fexports":307,"\u002Factions-and-metrics\u002Fexports-surround":2405},{"3.x":4,"2.x":203},[5,32,61,99,121,147,165],{"title":6,"icon":7,"path":8,"stem":9,"children":10,"page":31},"Getting Started","i-heroicons-star","\u002Fgetting-started","1.getting-started",[11,15,19,23,27],{"title":12,"path":13,"stem":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":16,"path":17,"stem":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":20,"path":21,"stem":22},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":24,"path":25,"stem":26},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration",{"title":28,"path":29,"stem":30},"Upgrade guide","\u002Fgetting-started\u002Fupgrade-guide","1.getting-started\u002F5.upgrade-guide",false,{"title":33,"icon":34,"path":35,"stem":36,"children":37,"page":31},"Resources","i-heroicons-document-text","\u002Fresources","2.resources",[38,41,45,49,53,57],{"title":33,"path":39,"stem":40},"\u002Fresources\u002Fresources","2.resources\u002F1.resources",{"title":42,"path":43,"stem":44},"Fields","\u002Fresources\u002Ffields","2.resources\u002F2.fields",{"title":46,"path":47,"stem":48},"Relationships","\u002Fresources\u002Frelations","2.resources\u002F3.relations",{"title":50,"path":51,"stem":52},"Validation","\u002Fresources\u002Fvalidation","2.resources\u002F4.validation",{"title":54,"path":55,"stem":56},"Perimeter","\u002Fresources\u002Fperimeter","2.resources\u002F5.perimeter",{"title":58,"path":59,"stem":60},"Limits","\u002Fresources\u002Flimits","2.resources\u002F6.limits",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":31},"Search","i-heroicons-magnifying-glass","\u002Fsearch","3.search",[67,71,75,79,83,87,91,95],{"title":68,"path":69,"stem":70},"Search overview","\u002Fsearch\u002Foverview","3.search\u002F1.overview",{"title":72,"path":73,"stem":74},"Search filters","\u002Fsearch\u002Ffilters","3.search\u002F2.filters",{"title":76,"path":77,"stem":78},"Sorts and selects","\u002Fsearch\u002Fsorts-and-selects","3.search\u002F3.sorts-and-selects",{"title":80,"path":81,"stem":82},"Includes and aggregates","\u002Fsearch\u002Fincludes-and-aggregates","3.search\u002F4.includes-and-aggregates",{"title":84,"path":85,"stem":86},"Scopes and instructions","\u002Fsearch\u002Fscopes-and-instructions","3.search\u002F5.scopes-and-instructions",{"title":88,"path":89,"stem":90},"Text search","\u002Fsearch\u002Ftext-search","3.search\u002F6.text-search",{"title":92,"path":93,"stem":94},"Search engines","\u002Fsearch\u002Fsearch-engines","3.search\u002F7.search-engines",{"title":96,"path":97,"stem":98},"Searching outside HTTP","\u002Fsearch\u002Foutside-http","3.search\u002F8.outside-http",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":31},"Writing","i-heroicons-pencil-square","\u002Fwriting","4.writing",[105,109,113,117],{"title":106,"path":107,"stem":108},"Mutate","\u002Fwriting\u002Fmutate","4.writing\u002F1.mutate",{"title":110,"path":111,"stem":112},"Writing relations","\u002Fwriting\u002Frelations","4.writing\u002F2.relations",{"title":114,"path":115,"stem":116},"Versioned rows","\u002Fwriting\u002Fversioned-rows","4.writing\u002F3.versioned-rows",{"title":118,"path":119,"stem":120},"Deleting and restoring","\u002Fwriting\u002Fdeleting","4.writing\u002F4.deleting",{"title":122,"icon":123,"path":124,"stem":125,"children":126,"page":31},"Actions and Metrics","i-heroicons-bolt","\u002Factions-and-metrics","5.actions-and-metrics",[127,131,135,139,143],{"title":128,"path":129,"stem":130},"Actions","\u002Factions-and-metrics\u002Factions","5.actions-and-metrics\u002F1.actions",{"title":132,"path":133,"stem":134},"Queued Actions","\u002Factions-and-metrics\u002Fqueued-actions","5.actions-and-metrics\u002F2.queued-actions",{"title":136,"path":137,"stem":138},"Confirmation","\u002Factions-and-metrics\u002Fconfirmation","5.actions-and-metrics\u002F3.confirmation",{"title":140,"path":141,"stem":142},"Metrics","\u002Factions-and-metrics\u002Fmetrics","5.actions-and-metrics\u002F4.metrics",{"title":144,"path":145,"stem":146},"Exports","\u002Factions-and-metrics\u002Fexports","5.actions-and-metrics\u002F5.exports",{"title":148,"icon":149,"path":150,"stem":151,"children":152,"page":31},"Authorization","i-heroicons-lock-closed","\u002Fauthorization","6.authorization",[153,157,161],{"title":154,"path":155,"stem":156},"Policies","\u002Fauthorization\u002Fpolicies","6.authorization\u002F1.policies",{"title":158,"path":159,"stem":160},"Gates","\u002Fauthorization\u002Fgates","6.authorization\u002F2.gates",{"title":162,"path":163,"stem":164},"Decision Cache","\u002Fauthorization\u002Fdecision-cache","6.authorization\u002F3.decision-cache",{"title":166,"icon":167,"path":168,"stem":169,"children":170,"page":31},"Digging Deeper","i-heroicons-list-bullet","\u002Fdigging-deeper","7.digging-deeper",[171,175,179,183,187,191,195,199],{"title":172,"path":173,"stem":174},"Details","\u002Fdigging-deeper\u002Fdetails","7.digging-deeper\u002F1.details",{"title":176,"path":177,"stem":178},"Events and Hooks","\u002Fdigging-deeper\u002Fevents-and-hooks","7.digging-deeper\u002F2.events-and-hooks",{"title":180,"path":181,"stem":182},"Custom Responses","\u002Fdigging-deeper\u002Fresponses","7.digging-deeper\u002F3.responses",{"title":184,"path":185,"stem":186},"OpenAPI Documentation","\u002Fdigging-deeper\u002Fopenapi","7.digging-deeper\u002F4.openapi",{"title":188,"path":189,"stem":190},"Precognition","\u002Fdigging-deeper\u002Fprecognition","7.digging-deeper\u002F5.precognition",{"title":192,"path":193,"stem":194},"Artisan Commands","\u002Fdigging-deeper\u002Fartisan","7.digging-deeper\u002F6.artisan",{"title":196,"path":197,"stem":198},"Laravel Boost Skill","\u002Fdigging-deeper\u002Fai-skill","7.digging-deeper\u002F7.ai-skill",{"title":200,"path":201,"stem":202},"Translations","\u002Fdigging-deeper\u002Ftranslations","7.digging-deeper\u002F8.translations",[204,215,237,260,297],{"title":6,"icon":7,"path":205,"stem":206,"children":207,"page":31},"\u002F2.x\u002Fgetting-started","2.x\u002F1.getting-started",[208,211],{"title":16,"path":209,"stem":210},"\u002F2.x\u002Fgetting-started\u002Finstallation","2.x\u002F1.getting-started\u002F1.installation",{"title":212,"path":213,"stem":214},"Upgrade Guide","\u002F2.x\u002Fgetting-started\u002Fupgrade-guide","2.x\u002F1.getting-started\u002F2.upgrade-guide",{"title":216,"icon":217,"path":218,"stem":219,"children":220,"page":31},"Endpoints","i-heroicons-arrow-uturn-left","\u002F2.x\u002Fendpoints","2.x\u002F2.endpoints",[221,224,227,230,233],{"title":172,"path":222,"stem":223},"\u002F2.x\u002Fendpoints\u002Fdetails","2.x\u002F2.endpoints\u002F1.details",{"title":62,"path":225,"stem":226},"\u002F2.x\u002Fendpoints\u002Fsearch","2.x\u002F2.endpoints\u002F2.search",{"title":106,"path":228,"stem":229},"\u002F2.x\u002Fendpoints\u002Fmutate","2.x\u002F2.endpoints\u002F3.mutate",{"title":128,"path":231,"stem":232},"\u002F2.x\u002Fendpoints\u002Factions","2.x\u002F2.endpoints\u002F4.actions",{"title":234,"path":235,"stem":236},"Delete","\u002F2.x\u002Fendpoints\u002Fdelete","2.x\u002F2.endpoints\u002F5.delete",{"title":33,"icon":34,"path":238,"stem":239,"children":240,"page":31},"\u002F2.x\u002Fresources","2.x\u002F3.resources",[241,245,249,252,256],{"title":242,"path":243,"stem":244},"Basics","\u002F2.x\u002Fresources\u002Fbasics","2.x\u002F3.resources\u002F1.basics",{"title":246,"path":247,"stem":248},"Exposed Data","\u002F2.x\u002Fresources\u002Fexposed-data","2.x\u002F3.resources\u002F2.exposed-data",{"title":46,"path":250,"stem":251},"\u002F2.x\u002Fresources\u002Frelationships","2.x\u002F3.resources\u002F3.relationships",{"title":253,"path":254,"stem":255},"Validations","\u002F2.x\u002Fresources\u002Fvalidations","2.x\u002F3.resources\u002F4.validations",{"title":257,"path":258,"stem":259},"Interactions","\u002F2.x\u002Fresources\u002Finteractions","2.x\u002F3.resources\u002F5.interactions",{"title":166,"icon":167,"path":261,"stem":262,"children":263,"page":31},"\u002F2.x\u002Fdigging-deeper","2.x\u002F4.digging-deeper",[264,267,271,274,278,282,286,290,294],{"title":128,"path":265,"stem":266},"\u002F2.x\u002Fdigging-deeper\u002Factions","2.x\u002F4.digging-deeper\u002F1.actions",{"title":268,"path":269,"stem":270},"Hooks","\u002F2.x\u002Fdigging-deeper\u002Fhooks","2.x\u002F4.digging-deeper\u002F2.hooks",{"title":158,"path":272,"stem":273},"\u002F2.x\u002Fdigging-deeper\u002Fgates","2.x\u002F4.digging-deeper\u002F3.gates",{"title":275,"path":276,"stem":277},"Authorizations","\u002F2.x\u002Fdigging-deeper\u002Fauthorizations","2.x\u002F4.digging-deeper\u002F4.authorizations",{"title":279,"path":280,"stem":281},"Full Text Search","\u002F2.x\u002Fdigging-deeper\u002Ffull-text-search","2.x\u002F4.digging-deeper\u002F5.full-text-search",{"title":283,"path":284,"stem":285},"Instructions","\u002F2.x\u002Fdigging-deeper\u002Finstructions","2.x\u002F4.digging-deeper\u002F6.instructions",{"title":287,"path":288,"stem":289},"Responses","\u002F2.x\u002Fdigging-deeper\u002Fresponses","2.x\u002F4.digging-deeper\u002F7.responses",{"title":291,"path":292,"stem":293},"Documentation","\u002F2.x\u002Fdigging-deeper\u002Fdocumentation","2.x\u002F4.digging-deeper\u002F8.documentation",{"title":188,"path":295,"stem":296},"\u002F2.x\u002Fdigging-deeper\u002Fprecognition","2.x\u002F4.digging-deeper\u002F9.precognition",{"title":298,"icon":299,"path":300,"stem":301,"children":302,"page":31},"Integrations","i-lucide-puzzle","\u002F2.x\u002Fintegrations","2.x\u002F5.integrations",[303],{"title":304,"path":305,"stem":306},"Flutter","\u002F2.x\u002Fintegrations\u002Fflutter","2.x\u002F5.integrations\u002F1.flutter",{"id":308,"title":144,"body":309,"description":2398,"extension":2399,"links":2400,"meta":2401,"navigation":367,"path":145,"seo":2402,"sitemap":2403,"stem":146,"__hash__":2404},"docs3x\u002F5.actions-and-metrics\u002F5.exports.md",{"type":310,"value":311,"toc":2393},"minimark",[312,321,335,340,1872,1879,1923,1962,1982,1986,1997,2132,2246,2259,2268,2276,2282,2286,2389],[313,314,315,316,320],"p",{},"The package has no export endpoint: a ",[317,318,319],"a",{"href":133},"queued, batched action"," covers it. The client sends the columns it wants and the search of its list. Each job writes one chunk of rows to a CSV part, and the batch joins the parts into one file that the client downloads.",[322,323,324],"note",{},[313,325,326,327,331,332,334],{},"A small export can stream in the request instead, with ",[328,329,330],"code",{},"lazy()",". See ",[317,333,96],{"href":97},".",[336,337,339],"h2",{"id":338},"the-action","The action",[341,342,347],"pre",{"className":343,"code":344,"language":345,"meta":346,"style":346},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?php\n\nnamespace App\\Rest\\Actions;\n\nuse App\\Models\\Ticket;\nuse Illuminate\\Bus\\PendingBatch;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Validation\\Rule;\nuse Lomkit\\Rest\\Actions\\Action;\nuse Lomkit\\Rest\\Actions\\ActionFields;\nuse Lomkit\\Rest\\Actions\\ActionResponse;\nuse Lomkit\\Rest\\Contracts\\BatchableAction;\nuse Lomkit\\Rest\\Fields\\Json;\n\nclass ExportTickets extends Action implements BatchableAction, ShouldQueue\n{\n    public const array COLUMNS = ['id', 'title', 'status'];\n\n    public int $chunkCount = 500;\n\n    public ?int $maxResources = 50000;\n\n    private string $export = '';\n\n    #[\\Override]\n    public function fields(): array\n    {\n        return [Json::make('columns')->rules(['required', 'list', Rule::in(self::COLUMNS)])];\n    }\n\n    #[\\Override]\n    public function withBatch(ActionFields $fields, PendingBatch $batch): void\n    {\n        $export = $this->export = (string) Str::uuid();\n        $columns = $fields->columns;\n\n        $batch->withOption('export', $export)->then(static function () use ($export, $columns): void {\n            $disk = Storage::disk('exports');\n            $csv = fopen('php:\u002F\u002Ftemp', 'w+');\n            fputcsv($csv, $columns, escape: '');\n            $parts = $disk->files($export);\n            sort($parts, SORT_NATURAL);\n\n            foreach ($parts as $part) {\n                stream_copy_to_stream($disk->readStream($part), $csv);\n            }\n\n            rewind($csv);\n            $disk->writeStream(\"{$export}.csv\", $csv);\n            $disk->deleteDirectory($export);\n        });\n    }\n\n    \u002F** @param Collection\u003Cint, Ticket> $models *\u002F\n    #[\\Override]\n    public function handle(ActionFields $fields, Collection $models): void\n    {\n        $csv = fopen('php:\u002F\u002Ftemp', 'w+');\n\n        foreach ($models as $ticket) {\n            fputcsv($csv, $ticket->only($fields->columns), escape: '');\n        }\n\n        rewind($csv);\n        Storage::disk('exports')->writeStream($this->batch()?->options['export'].'\u002F'.$models->first()?->getKey().'.csv', $csv);\n    }\n\n    #[\\Override]\n    public function respond(ActionFields $fields, int $impacted): ActionResponse\n    {\n        if ($impacted === 0) {\n            return ActionResponse::message('No rows to export.');\n        }\n\n        return ActionResponse::download(Storage::disk('exports')->temporaryUrl(\"{$this->export}.csv\", now()->addDay()), 'tickets.csv');\n    }\n}\n","php","",[328,348,349,362,369,393,398,418,438,462,481,504,522,540,563,585,607,629,651,656,684,690,742,747,768,773,796,801,822,827,838,856,862,937,943,948,957,992,997,1034,1055,1060,1124,1155,1188,1218,1243,1261,1266,1288,1316,1322,1327,1339,1375,1393,1399,1404,1409,1432,1441,1472,1477,1506,1511,1533,1571,1577,1582,1594,1680,1685,1690,1699,1731,1736,1757,1782,1787,1792,1861,1866],{"__ignoreMap":346},[350,351,354,358],"span",{"class":352,"line":353},"line",1,[350,355,357],{"class":356},"sMK4o","\u003C?",[350,359,361],{"class":360},"sTEyZ","php\n",[350,363,365],{"class":352,"line":364},2,[350,366,368],{"emptyLinePlaceholder":367},true,"\n",[350,370,372,376,380,383,386,388,390],{"class":352,"line":371},3,[350,373,375],{"class":374},"sbssI","namespace",[350,377,379],{"class":378},"sBMFI"," App",[350,381,382],{"class":356},"\\",[350,384,385],{"class":378},"Rest",[350,387,382],{"class":356},[350,389,128],{"class":378},[350,391,392],{"class":356},";\n",[350,394,396],{"class":352,"line":395},4,[350,397,368],{"emptyLinePlaceholder":367},[350,399,401,404,406,408,411,413,416],{"class":352,"line":400},5,[350,402,403],{"class":374},"use",[350,405,379],{"class":360},[350,407,382],{"class":356},[350,409,410],{"class":360},"Models",[350,412,382],{"class":356},[350,414,415],{"class":360},"Ticket",[350,417,392],{"class":356},[350,419,421,423,426,428,431,433,436],{"class":352,"line":420},6,[350,422,403],{"class":374},[350,424,425],{"class":360}," Illuminate",[350,427,382],{"class":356},[350,429,430],{"class":360},"Bus",[350,432,382],{"class":356},[350,434,435],{"class":360},"PendingBatch",[350,437,392],{"class":356},[350,439,441,443,445,447,450,452,455,457,460],{"class":352,"line":440},7,[350,442,403],{"class":374},[350,444,425],{"class":360},[350,446,382],{"class":356},[350,448,449],{"class":360},"Contracts",[350,451,382],{"class":356},[350,453,454],{"class":360},"Queue",[350,456,382],{"class":356},[350,458,459],{"class":360},"ShouldQueue",[350,461,392],{"class":356},[350,463,465,467,469,471,474,476,479],{"class":352,"line":464},8,[350,466,403],{"class":374},[350,468,425],{"class":360},[350,470,382],{"class":356},[350,472,473],{"class":360},"Support",[350,475,382],{"class":356},[350,477,478],{"class":360},"Collection",[350,480,392],{"class":356},[350,482,484,486,488,490,492,494,497,499,502],{"class":352,"line":483},9,[350,485,403],{"class":374},[350,487,425],{"class":360},[350,489,382],{"class":356},[350,491,473],{"class":360},[350,493,382],{"class":356},[350,495,496],{"class":360},"Facades",[350,498,382],{"class":356},[350,500,501],{"class":360},"Storage",[350,503,392],{"class":356},[350,505,507,509,511,513,515,517,520],{"class":352,"line":506},10,[350,508,403],{"class":374},[350,510,425],{"class":360},[350,512,382],{"class":356},[350,514,473],{"class":360},[350,516,382],{"class":356},[350,518,519],{"class":360},"Str",[350,521,392],{"class":356},[350,523,525,527,529,531,533,535,538],{"class":352,"line":524},11,[350,526,403],{"class":374},[350,528,425],{"class":360},[350,530,382],{"class":356},[350,532,50],{"class":360},[350,534,382],{"class":356},[350,536,537],{"class":360},"Rule",[350,539,392],{"class":356},[350,541,543,545,548,550,552,554,556,558,561],{"class":352,"line":542},12,[350,544,403],{"class":374},[350,546,547],{"class":360}," Lomkit",[350,549,382],{"class":356},[350,551,385],{"class":360},[350,553,382],{"class":356},[350,555,128],{"class":360},[350,557,382],{"class":356},[350,559,560],{"class":360},"Action",[350,562,392],{"class":356},[350,564,566,568,570,572,574,576,578,580,583],{"class":352,"line":565},13,[350,567,403],{"class":374},[350,569,547],{"class":360},[350,571,382],{"class":356},[350,573,385],{"class":360},[350,575,382],{"class":356},[350,577,128],{"class":360},[350,579,382],{"class":356},[350,581,582],{"class":360},"ActionFields",[350,584,392],{"class":356},[350,586,588,590,592,594,596,598,600,602,605],{"class":352,"line":587},14,[350,589,403],{"class":374},[350,591,547],{"class":360},[350,593,382],{"class":356},[350,595,385],{"class":360},[350,597,382],{"class":356},[350,599,128],{"class":360},[350,601,382],{"class":356},[350,603,604],{"class":360},"ActionResponse",[350,606,392],{"class":356},[350,608,610,612,614,616,618,620,622,624,627],{"class":352,"line":609},15,[350,611,403],{"class":374},[350,613,547],{"class":360},[350,615,382],{"class":356},[350,617,385],{"class":360},[350,619,382],{"class":356},[350,621,449],{"class":360},[350,623,382],{"class":356},[350,625,626],{"class":360},"BatchableAction",[350,628,392],{"class":356},[350,630,632,634,636,638,640,642,644,646,649],{"class":352,"line":631},16,[350,633,403],{"class":374},[350,635,547],{"class":360},[350,637,382],{"class":356},[350,639,385],{"class":360},[350,641,382],{"class":356},[350,643,42],{"class":360},[350,645,382],{"class":356},[350,647,648],{"class":360},"Json",[350,650,392],{"class":356},[350,652,654],{"class":352,"line":653},17,[350,655,368],{"emptyLinePlaceholder":367},[350,657,659,663,666,669,672,675,678,681],{"class":352,"line":658},18,[350,660,662],{"class":661},"spNyl","class",[350,664,665],{"class":378}," ExportTickets",[350,667,668],{"class":661}," extends",[350,670,671],{"class":378}," Action",[350,673,674],{"class":661}," implements",[350,676,677],{"class":378}," BatchableAction",[350,679,680],{"class":356},",",[350,682,683],{"class":378}," ShouldQueue\n",[350,685,687],{"class":352,"line":686},19,[350,688,689],{"class":356},"{\n",[350,691,693,696,699,702,705,708,711,714,718,720,722,725,728,730,732,734,737,739],{"class":352,"line":692},20,[350,694,695],{"class":661},"    public",[350,697,698],{"class":661}," const",[350,700,701],{"class":374}," array",[350,703,704],{"class":360}," COLUMNS ",[350,706,707],{"class":356},"=",[350,709,710],{"class":356}," [",[350,712,713],{"class":356},"'",[350,715,717],{"class":716},"sfazB","id",[350,719,713],{"class":356},[350,721,680],{"class":356},[350,723,724],{"class":356}," '",[350,726,727],{"class":716},"title",[350,729,713],{"class":356},[350,731,680],{"class":356},[350,733,724],{"class":356},[350,735,736],{"class":716},"status",[350,738,713],{"class":356},[350,740,741],{"class":356},"];\n",[350,743,745],{"class":352,"line":744},21,[350,746,368],{"emptyLinePlaceholder":367},[350,748,750,752,755,758,761,763,766],{"class":352,"line":749},22,[350,751,695],{"class":661},[350,753,754],{"class":374}," int",[350,756,757],{"class":356}," $",[350,759,760],{"class":360},"chunkCount ",[350,762,707],{"class":356},[350,764,765],{"class":374}," 500",[350,767,392],{"class":356},[350,769,771],{"class":352,"line":770},23,[350,772,368],{"emptyLinePlaceholder":367},[350,774,776,778,781,784,786,789,791,794],{"class":352,"line":775},24,[350,777,695],{"class":661},[350,779,780],{"class":356}," ?",[350,782,783],{"class":374},"int",[350,785,757],{"class":356},[350,787,788],{"class":360},"maxResources ",[350,790,707],{"class":356},[350,792,793],{"class":374}," 50000",[350,795,392],{"class":356},[350,797,799],{"class":352,"line":798},25,[350,800,368],{"emptyLinePlaceholder":367},[350,802,804,807,810,812,815,817,820],{"class":352,"line":803},26,[350,805,806],{"class":661},"    private",[350,808,809],{"class":374}," string",[350,811,757],{"class":356},[350,813,814],{"class":360},"export ",[350,816,707],{"class":356},[350,818,819],{"class":356}," ''",[350,821,392],{"class":356},[350,823,825],{"class":352,"line":824},27,[350,826,368],{"emptyLinePlaceholder":367},[350,828,830,833,835],{"class":352,"line":829},28,[350,831,832],{"class":360},"    #[",[350,834,382],{"class":356},[350,836,837],{"class":360},"Override]\n",[350,839,841,843,846,850,853],{"class":352,"line":840},29,[350,842,695],{"class":661},[350,844,845],{"class":661}," function",[350,847,849],{"class":848},"s2Zo4"," fields",[350,851,852],{"class":356},"():",[350,854,855],{"class":374}," array\n",[350,857,859],{"class":352,"line":858},30,[350,860,861],{"class":356},"    {\n",[350,863,865,869,871,873,876,879,882,884,887,889,892,895,898,900,903,905,907,909,912,914,916,919,921,924,926,929,931,934],{"class":352,"line":864},31,[350,866,868],{"class":867},"s7zQu","        return",[350,870,710],{"class":356},[350,872,648],{"class":378},[350,874,875],{"class":356},"::",[350,877,878],{"class":848},"make",[350,880,881],{"class":356},"(",[350,883,713],{"class":356},[350,885,886],{"class":716},"columns",[350,888,713],{"class":356},[350,890,891],{"class":356},")->",[350,893,894],{"class":848},"rules",[350,896,897],{"class":356},"([",[350,899,713],{"class":356},[350,901,902],{"class":716},"required",[350,904,713],{"class":356},[350,906,680],{"class":356},[350,908,724],{"class":356},[350,910,911],{"class":716},"list",[350,913,713],{"class":356},[350,915,680],{"class":356},[350,917,918],{"class":378}," Rule",[350,920,875],{"class":356},[350,922,923],{"class":848},"in",[350,925,881],{"class":356},[350,927,928],{"class":661},"self",[350,930,875],{"class":356},[350,932,933],{"class":360},"COLUMNS",[350,935,936],{"class":356},")])];\n",[350,938,940],{"class":352,"line":939},32,[350,941,942],{"class":356},"    }\n",[350,944,946],{"class":352,"line":945},33,[350,947,368],{"emptyLinePlaceholder":367},[350,949,951,953,955],{"class":352,"line":950},34,[350,952,832],{"class":360},[350,954,382],{"class":356},[350,956,837],{"class":360},[350,958,960,962,964,967,969,971,973,976,978,981,983,986,989],{"class":352,"line":959},35,[350,961,695],{"class":661},[350,963,845],{"class":661},[350,965,966],{"class":848}," withBatch",[350,968,881],{"class":356},[350,970,582],{"class":378},[350,972,757],{"class":356},[350,974,975],{"class":360},"fields",[350,977,680],{"class":356},[350,979,980],{"class":378}," PendingBatch",[350,982,757],{"class":356},[350,984,985],{"class":360},"batch",[350,987,988],{"class":356},"):",[350,990,991],{"class":374}," void\n",[350,993,995],{"class":352,"line":994},36,[350,996,861],{"class":356},[350,998,1000,1003,1005,1007,1010,1012,1014,1017,1020,1023,1026,1028,1031],{"class":352,"line":999},37,[350,1001,1002],{"class":356},"        $",[350,1004,814],{"class":360},[350,1006,707],{"class":356},[350,1008,1009],{"class":356}," $this->",[350,1011,814],{"class":360},[350,1013,707],{"class":356},[350,1015,1016],{"class":356}," (",[350,1018,1019],{"class":661},"string",[350,1021,1022],{"class":356},")",[350,1024,1025],{"class":378}," Str",[350,1027,875],{"class":356},[350,1029,1030],{"class":848},"uuid",[350,1032,1033],{"class":356},"();\n",[350,1035,1037,1039,1042,1044,1046,1048,1051,1053],{"class":352,"line":1036},38,[350,1038,1002],{"class":356},[350,1040,1041],{"class":360},"columns ",[350,1043,707],{"class":356},[350,1045,757],{"class":356},[350,1047,975],{"class":360},[350,1049,1050],{"class":356},"->",[350,1052,886],{"class":360},[350,1054,392],{"class":356},[350,1056,1058],{"class":352,"line":1057},39,[350,1059,368],{"emptyLinePlaceholder":367},[350,1061,1063,1065,1067,1069,1072,1074,1076,1079,1081,1083,1085,1087,1089,1092,1094,1097,1099,1102,1105,1108,1110,1112,1114,1116,1118,1121],{"class":352,"line":1062},40,[350,1064,1002],{"class":356},[350,1066,985],{"class":360},[350,1068,1050],{"class":356},[350,1070,1071],{"class":848},"withOption",[350,1073,881],{"class":356},[350,1075,713],{"class":356},[350,1077,1078],{"class":716},"export",[350,1080,713],{"class":356},[350,1082,680],{"class":356},[350,1084,757],{"class":356},[350,1086,1078],{"class":360},[350,1088,891],{"class":356},[350,1090,1091],{"class":848},"then",[350,1093,881],{"class":356},[350,1095,1096],{"class":661},"static",[350,1098,845],{"class":661},[350,1100,1101],{"class":356}," ()",[350,1103,1104],{"class":374}," use",[350,1106,1107],{"class":356}," ($",[350,1109,1078],{"class":360},[350,1111,680],{"class":356},[350,1113,757],{"class":356},[350,1115,886],{"class":360},[350,1117,988],{"class":356},[350,1119,1120],{"class":374}," void",[350,1122,1123],{"class":356}," {\n",[350,1125,1127,1130,1133,1135,1138,1140,1143,1145,1147,1150,1152],{"class":352,"line":1126},41,[350,1128,1129],{"class":356},"            $",[350,1131,1132],{"class":360},"disk ",[350,1134,707],{"class":356},[350,1136,1137],{"class":378}," Storage",[350,1139,875],{"class":356},[350,1141,1142],{"class":848},"disk",[350,1144,881],{"class":356},[350,1146,713],{"class":356},[350,1148,1149],{"class":716},"exports",[350,1151,713],{"class":356},[350,1153,1154],{"class":356},");\n",[350,1156,1158,1160,1163,1165,1168,1170,1172,1175,1177,1179,1181,1184,1186],{"class":352,"line":1157},42,[350,1159,1129],{"class":356},[350,1161,1162],{"class":360},"csv ",[350,1164,707],{"class":356},[350,1166,1167],{"class":848}," fopen",[350,1169,881],{"class":356},[350,1171,713],{"class":356},[350,1173,1174],{"class":716},"php:\u002F\u002Ftemp",[350,1176,713],{"class":356},[350,1178,680],{"class":356},[350,1180,724],{"class":356},[350,1182,1183],{"class":716},"w+",[350,1185,713],{"class":356},[350,1187,1154],{"class":356},[350,1189,1191,1194,1197,1200,1202,1204,1206,1208,1211,1214,1216],{"class":352,"line":1190},43,[350,1192,1193],{"class":848},"            fputcsv",[350,1195,1196],{"class":356},"($",[350,1198,1199],{"class":360},"csv",[350,1201,680],{"class":356},[350,1203,757],{"class":356},[350,1205,886],{"class":360},[350,1207,680],{"class":356},[350,1209,1210],{"class":378}," escape",[350,1212,1213],{"class":356},":",[350,1215,819],{"class":356},[350,1217,1154],{"class":356},[350,1219,1221,1223,1226,1228,1230,1232,1234,1237,1239,1241],{"class":352,"line":1220},44,[350,1222,1129],{"class":356},[350,1224,1225],{"class":360},"parts ",[350,1227,707],{"class":356},[350,1229,757],{"class":356},[350,1231,1142],{"class":360},[350,1233,1050],{"class":356},[350,1235,1236],{"class":848},"files",[350,1238,1196],{"class":356},[350,1240,1078],{"class":360},[350,1242,1154],{"class":356},[350,1244,1246,1249,1251,1254,1256,1259],{"class":352,"line":1245},45,[350,1247,1248],{"class":848},"            sort",[350,1250,1196],{"class":356},[350,1252,1253],{"class":360},"parts",[350,1255,680],{"class":356},[350,1257,1258],{"class":360}," SORT_NATURAL",[350,1260,1154],{"class":356},[350,1262,1264],{"class":352,"line":1263},46,[350,1265,368],{"emptyLinePlaceholder":367},[350,1267,1269,1272,1274,1276,1279,1281,1284,1286],{"class":352,"line":1268},47,[350,1270,1271],{"class":867},"            foreach",[350,1273,1107],{"class":356},[350,1275,1225],{"class":360},[350,1277,1278],{"class":356},"as",[350,1280,757],{"class":356},[350,1282,1283],{"class":360},"part",[350,1285,1022],{"class":356},[350,1287,1123],{"class":356},[350,1289,1291,1294,1296,1298,1300,1303,1305,1307,1310,1312,1314],{"class":352,"line":1290},48,[350,1292,1293],{"class":848},"                stream_copy_to_stream",[350,1295,1196],{"class":356},[350,1297,1142],{"class":360},[350,1299,1050],{"class":356},[350,1301,1302],{"class":848},"readStream",[350,1304,1196],{"class":356},[350,1306,1283],{"class":360},[350,1308,1309],{"class":356},"),",[350,1311,757],{"class":356},[350,1313,1199],{"class":360},[350,1315,1154],{"class":356},[350,1317,1319],{"class":352,"line":1318},49,[350,1320,1321],{"class":356},"            }\n",[350,1323,1325],{"class":352,"line":1324},50,[350,1326,368],{"emptyLinePlaceholder":367},[350,1328,1330,1333,1335,1337],{"class":352,"line":1329},51,[350,1331,1332],{"class":848},"            rewind",[350,1334,1196],{"class":356},[350,1336,1199],{"class":360},[350,1338,1154],{"class":356},[350,1340,1342,1344,1346,1348,1351,1353,1356,1358,1361,1364,1367,1369,1371,1373],{"class":352,"line":1341},52,[350,1343,1129],{"class":356},[350,1345,1142],{"class":360},[350,1347,1050],{"class":356},[350,1349,1350],{"class":848},"writeStream",[350,1352,881],{"class":356},[350,1354,1355],{"class":356},"\"{$",[350,1357,1078],{"class":360},[350,1359,1360],{"class":356},"}",[350,1362,1363],{"class":716},".csv",[350,1365,1366],{"class":356},"\"",[350,1368,680],{"class":356},[350,1370,757],{"class":356},[350,1372,1199],{"class":360},[350,1374,1154],{"class":356},[350,1376,1378,1380,1382,1384,1387,1389,1391],{"class":352,"line":1377},53,[350,1379,1129],{"class":356},[350,1381,1142],{"class":360},[350,1383,1050],{"class":356},[350,1385,1386],{"class":848},"deleteDirectory",[350,1388,1196],{"class":356},[350,1390,1078],{"class":360},[350,1392,1154],{"class":356},[350,1394,1396],{"class":352,"line":1395},54,[350,1397,1398],{"class":356},"        });\n",[350,1400,1402],{"class":352,"line":1401},55,[350,1403,942],{"class":356},[350,1405,1407],{"class":352,"line":1406},56,[350,1408,368],{"emptyLinePlaceholder":367},[350,1410,1412,1416,1420,1424,1427,1429],{"class":352,"line":1411},57,[350,1413,1415],{"class":1414},"sHwdD","    \u002F** ",[350,1417,1419],{"class":1418},"svl4J","@param",[350,1421,1423],{"class":1422},"sFweD"," Collection",[350,1425,1426],{"class":1414},"\u003C",[350,1428,783],{"class":1418},[350,1430,1431],{"class":1414},", Ticket> $models *\u002F\n",[350,1433,1435,1437,1439],{"class":352,"line":1434},58,[350,1436,832],{"class":360},[350,1438,382],{"class":356},[350,1440,837],{"class":360},[350,1442,1444,1446,1448,1451,1453,1455,1457,1459,1461,1463,1465,1468,1470],{"class":352,"line":1443},59,[350,1445,695],{"class":661},[350,1447,845],{"class":661},[350,1449,1450],{"class":848}," handle",[350,1452,881],{"class":356},[350,1454,582],{"class":378},[350,1456,757],{"class":356},[350,1458,975],{"class":360},[350,1460,680],{"class":356},[350,1462,1423],{"class":378},[350,1464,757],{"class":356},[350,1466,1467],{"class":360},"models",[350,1469,988],{"class":356},[350,1471,991],{"class":374},[350,1473,1475],{"class":352,"line":1474},60,[350,1476,861],{"class":356},[350,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504],{"class":352,"line":1479},61,[350,1481,1002],{"class":356},[350,1483,1162],{"class":360},[350,1485,707],{"class":356},[350,1487,1167],{"class":848},[350,1489,881],{"class":356},[350,1491,713],{"class":356},[350,1493,1174],{"class":716},[350,1495,713],{"class":356},[350,1497,680],{"class":356},[350,1499,724],{"class":356},[350,1501,1183],{"class":716},[350,1503,713],{"class":356},[350,1505,1154],{"class":356},[350,1507,1509],{"class":352,"line":1508},62,[350,1510,368],{"emptyLinePlaceholder":367},[350,1512,1514,1517,1519,1522,1524,1526,1529,1531],{"class":352,"line":1513},63,[350,1515,1516],{"class":867},"        foreach",[350,1518,1107],{"class":356},[350,1520,1521],{"class":360},"models ",[350,1523,1278],{"class":356},[350,1525,757],{"class":356},[350,1527,1528],{"class":360},"ticket",[350,1530,1022],{"class":356},[350,1532,1123],{"class":356},[350,1534,1536,1538,1540,1542,1544,1546,1548,1550,1553,1555,1557,1559,1561,1563,1565,1567,1569],{"class":352,"line":1535},64,[350,1537,1193],{"class":848},[350,1539,1196],{"class":356},[350,1541,1199],{"class":360},[350,1543,680],{"class":356},[350,1545,757],{"class":356},[350,1547,1528],{"class":360},[350,1549,1050],{"class":356},[350,1551,1552],{"class":848},"only",[350,1554,1196],{"class":356},[350,1556,975],{"class":360},[350,1558,1050],{"class":356},[350,1560,886],{"class":360},[350,1562,1309],{"class":356},[350,1564,1210],{"class":378},[350,1566,1213],{"class":356},[350,1568,819],{"class":356},[350,1570,1154],{"class":356},[350,1572,1574],{"class":352,"line":1573},65,[350,1575,1576],{"class":356},"        }\n",[350,1578,1580],{"class":352,"line":1579},66,[350,1581,368],{"emptyLinePlaceholder":367},[350,1583,1585,1588,1590,1592],{"class":352,"line":1584},67,[350,1586,1587],{"class":848},"        rewind",[350,1589,1196],{"class":356},[350,1591,1199],{"class":360},[350,1593,1154],{"class":356},[350,1595,1597,1600,1602,1604,1606,1608,1610,1612,1614,1616,1619,1621,1624,1627,1630,1632,1634,1636,1639,1642,1645,1648,1651,1653,1655,1658,1660,1663,1666,1668,1670,1672,1674,1676,1678],{"class":352,"line":1596},68,[350,1598,1599],{"class":378},"        Storage",[350,1601,875],{"class":356},[350,1603,1142],{"class":848},[350,1605,881],{"class":356},[350,1607,713],{"class":356},[350,1609,1149],{"class":716},[350,1611,713],{"class":356},[350,1613,891],{"class":356},[350,1615,1350],{"class":848},[350,1617,1618],{"class":356},"($this->",[350,1620,985],{"class":848},[350,1622,1623],{"class":356},"()?->",[350,1625,1626],{"class":360},"options",[350,1628,1629],{"class":356},"[",[350,1631,713],{"class":356},[350,1633,1078],{"class":716},[350,1635,713],{"class":356},[350,1637,1638],{"class":356},"]",[350,1640,1641],{"class":356},".'",[350,1643,1644],{"class":716},"\u002F",[350,1646,1647],{"class":356},"'.",[350,1649,1650],{"class":356},"$",[350,1652,1467],{"class":360},[350,1654,1050],{"class":356},[350,1656,1657],{"class":848},"first",[350,1659,1623],{"class":356},[350,1661,1662],{"class":848},"getKey",[350,1664,1665],{"class":356},"()",[350,1667,1641],{"class":356},[350,1669,1363],{"class":716},[350,1671,713],{"class":356},[350,1673,680],{"class":356},[350,1675,757],{"class":356},[350,1677,1199],{"class":360},[350,1679,1154],{"class":356},[350,1681,1683],{"class":352,"line":1682},69,[350,1684,942],{"class":356},[350,1686,1688],{"class":352,"line":1687},70,[350,1689,368],{"emptyLinePlaceholder":367},[350,1691,1693,1695,1697],{"class":352,"line":1692},71,[350,1694,832],{"class":360},[350,1696,382],{"class":356},[350,1698,837],{"class":360},[350,1700,1702,1704,1706,1709,1711,1713,1715,1717,1719,1721,1723,1726,1728],{"class":352,"line":1701},72,[350,1703,695],{"class":661},[350,1705,845],{"class":661},[350,1707,1708],{"class":848}," respond",[350,1710,881],{"class":356},[350,1712,582],{"class":378},[350,1714,757],{"class":356},[350,1716,975],{"class":360},[350,1718,680],{"class":356},[350,1720,754],{"class":374},[350,1722,757],{"class":356},[350,1724,1725],{"class":360},"impacted",[350,1727,988],{"class":356},[350,1729,1730],{"class":378}," ActionResponse\n",[350,1732,1734],{"class":352,"line":1733},73,[350,1735,861],{"class":356},[350,1737,1739,1742,1744,1747,1750,1753,1755],{"class":352,"line":1738},74,[350,1740,1741],{"class":867},"        if",[350,1743,1107],{"class":356},[350,1745,1746],{"class":360},"impacted ",[350,1748,1749],{"class":356},"===",[350,1751,1752],{"class":374}," 0",[350,1754,1022],{"class":356},[350,1756,1123],{"class":356},[350,1758,1760,1763,1766,1768,1771,1773,1775,1778,1780],{"class":352,"line":1759},75,[350,1761,1762],{"class":867},"            return",[350,1764,1765],{"class":378}," ActionResponse",[350,1767,875],{"class":356},[350,1769,1770],{"class":848},"message",[350,1772,881],{"class":356},[350,1774,713],{"class":356},[350,1776,1777],{"class":716},"No rows to export.",[350,1779,713],{"class":356},[350,1781,1154],{"class":356},[350,1783,1785],{"class":352,"line":1784},76,[350,1786,1576],{"class":356},[350,1788,1790],{"class":352,"line":1789},77,[350,1791,368],{"emptyLinePlaceholder":367},[350,1793,1795,1797,1799,1801,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1825,1827,1830,1832,1834,1836,1838,1840,1843,1846,1849,1852,1854,1857,1859],{"class":352,"line":1794},78,[350,1796,868],{"class":867},[350,1798,1765],{"class":378},[350,1800,875],{"class":356},[350,1802,1803],{"class":848},"download",[350,1805,881],{"class":356},[350,1807,501],{"class":378},[350,1809,875],{"class":356},[350,1811,1142],{"class":848},[350,1813,881],{"class":356},[350,1815,713],{"class":356},[350,1817,1149],{"class":716},[350,1819,713],{"class":356},[350,1821,891],{"class":356},[350,1823,1824],{"class":848},"temporaryUrl",[350,1826,881],{"class":356},[350,1828,1829],{"class":356},"\"{$this->",[350,1831,1078],{"class":360},[350,1833,1360],{"class":356},[350,1835,1363],{"class":716},[350,1837,1366],{"class":356},[350,1839,680],{"class":356},[350,1841,1842],{"class":848}," now",[350,1844,1845],{"class":356},"()->",[350,1847,1848],{"class":848},"addDay",[350,1850,1851],{"class":356},"()),",[350,1853,724],{"class":356},[350,1855,1856],{"class":716},"tickets.csv",[350,1858,713],{"class":356},[350,1860,1154],{"class":356},[350,1862,1864],{"class":352,"line":1863},79,[350,1865,942],{"class":356},[350,1867,1869],{"class":352,"line":1868},80,[350,1870,1871],{"class":356},"}\n",[313,1873,1874,1875,1878],{},"Declare it in the ",[328,1876,1877],{},"actions()"," of the resource, and add the progress route:",[341,1880,1882],{"className":343,"code":1881,"language":345,"meta":346,"style":346},"public function actions(): array\n{\n    return [ExportTickets::make()];\n}\n",[328,1883,1884,1898,1902,1919],{"__ignoreMap":346},[350,1885,1886,1889,1891,1894,1896],{"class":352,"line":353},[350,1887,1888],{"class":661},"public",[350,1890,845],{"class":661},[350,1892,1893],{"class":848}," actions",[350,1895,852],{"class":356},[350,1897,855],{"class":374},[350,1899,1900],{"class":352,"line":364},[350,1901,689],{"class":356},[350,1903,1904,1907,1909,1912,1914,1916],{"class":352,"line":371},[350,1905,1906],{"class":867},"    return",[350,1908,710],{"class":356},[350,1910,1911],{"class":378},"ExportTickets",[350,1913,875],{"class":356},[350,1915,878],{"class":848},[350,1917,1918],{"class":356},"()];\n",[350,1920,1921],{"class":352,"line":395},[350,1922,1871],{"class":356},[341,1924,1926],{"className":343,"code":1925,"language":345,"meta":346,"style":346},"Rest::resource('tickets', TicketController::class)->withBatchProgress();\n",[328,1927,1928],{"__ignoreMap":346},[350,1929,1930,1932,1934,1937,1939,1941,1944,1946,1948,1951,1953,1955,1957,1960],{"class":352,"line":353},[350,1931,385],{"class":378},[350,1933,875],{"class":356},[350,1935,1936],{"class":848},"resource",[350,1938,881],{"class":356},[350,1940,713],{"class":356},[350,1942,1943],{"class":716},"tickets",[350,1945,713],{"class":356},[350,1947,680],{"class":356},[350,1949,1950],{"class":378}," TicketController",[350,1952,875],{"class":356},[350,1954,662],{"class":374},[350,1956,891],{"class":356},[350,1958,1959],{"class":848},"withBatchProgress",[350,1961,1033],{"class":356},[313,1963,1964,1966,1967,1970,1971,1974,1975,1978,1979,334],{},[328,1965,1149],{}," is a disk of ",[328,1968,1969],{},"config\u002Ffilesystems.php",". Every worker must reach it, and it must build temporary URLs: ",[328,1972,1973],{},"s3",", or ",[328,1976,1977],{},"local"," with ",[328,1980,1981],{},"'serve' => true",[336,1983,1985],{"id":1984},"running-an-export","Running an export",[341,1987,1991],{"className":1988,"code":1989,"language":1990,"meta":346,"style":346},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","POST \u002Fapi\u002Ftickets\u002Factions\u002Fexport-tickets\n","http",[328,1992,1993],{"__ignoreMap":346},[350,1994,1995],{"class":352,"line":353},[350,1996,1989],{},[341,1998,2002],{"className":1999,"code":2000,"language":2001,"meta":346,"style":346},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"fields\": [{\"name\": \"columns\", \"value\": [\"title\", \"id\"]}],\n  \"search\": {\"filters\": [{\"field\": \"status\", \"value\": \"open\"}]}\n}\n","json",[328,2003,2004,2008,2068,2128],{"__ignoreMap":346},[350,2005,2006],{"class":352,"line":353},[350,2007,689],{"class":356},[350,2009,2010,2013,2015,2017,2019,2022,2024,2027,2029,2031,2034,2036,2038,2040,2042,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065],{"class":352,"line":364},[350,2011,2012],{"class":356},"  \"",[350,2014,975],{"class":661},[350,2016,1366],{"class":356},[350,2018,1213],{"class":356},[350,2020,2021],{"class":356}," [{",[350,2023,1366],{"class":356},[350,2025,2026],{"class":378},"name",[350,2028,1366],{"class":356},[350,2030,1213],{"class":356},[350,2032,2033],{"class":356}," \"",[350,2035,886],{"class":716},[350,2037,1366],{"class":356},[350,2039,680],{"class":356},[350,2041,2033],{"class":356},[350,2043,2044],{"class":378},"value",[350,2046,1366],{"class":356},[350,2048,1213],{"class":356},[350,2050,710],{"class":356},[350,2052,1366],{"class":356},[350,2054,727],{"class":716},[350,2056,1366],{"class":356},[350,2058,680],{"class":356},[350,2060,2033],{"class":356},[350,2062,717],{"class":716},[350,2064,1366],{"class":356},[350,2066,2067],{"class":356},"]}],\n",[350,2069,2070,2072,2075,2077,2079,2082,2084,2087,2089,2091,2093,2095,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120,2123,2125],{"class":352,"line":371},[350,2071,2012],{"class":356},[350,2073,2074],{"class":661},"search",[350,2076,1366],{"class":356},[350,2078,1213],{"class":356},[350,2080,2081],{"class":356}," {",[350,2083,1366],{"class":356},[350,2085,2086],{"class":378},"filters",[350,2088,1366],{"class":356},[350,2090,1213],{"class":356},[350,2092,2021],{"class":356},[350,2094,1366],{"class":356},[350,2096,2097],{"class":374},"field",[350,2099,1366],{"class":356},[350,2101,1213],{"class":356},[350,2103,2033],{"class":356},[350,2105,736],{"class":716},[350,2107,1366],{"class":356},[350,2109,680],{"class":356},[350,2111,2033],{"class":356},[350,2113,2044],{"class":374},[350,2115,1366],{"class":356},[350,2117,1213],{"class":356},[350,2119,2033],{"class":356},[350,2121,2122],{"class":716},"open",[350,2124,1366],{"class":356},[350,2126,2127],{"class":356},"}]}\n",[350,2129,2130],{"class":352,"line":395},[350,2131,1871],{"class":356},[341,2133,2135],{"className":1999,"code":2134,"language":2001,"meta":346,"style":346},"{\"data\": {\"impacted\": 5, \"batch\": \"9f0c4d2e-5a1b-4c3d-8e7f-0a1b2c3d4e5f\", \"result\": {\"type\": \"download\", \"url\": \"https:\u002F\u002Ffiles.example.com\u002F3e1f6a2b-7c4d-4e5f-9a0b-1c2d3e4f5a6b.csv?expires=1796205600&signature=…\", \"name\": \"tickets.csv\"}}}\n",[328,2136,2137],{"__ignoreMap":346},[350,2138,2139,2142,2144,2147,2149,2151,2153,2155,2157,2159,2161,2164,2166,2168,2170,2172,2174,2176,2179,2181,2183,2185,2188,2190,2192,2194,2196,2199,2201,2203,2205,2207,2209,2211,2213,2216,2218,2220,2222,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243],{"class":352,"line":353},[350,2140,2141],{"class":356},"{",[350,2143,1366],{"class":356},[350,2145,2146],{"class":661},"data",[350,2148,1366],{"class":356},[350,2150,1213],{"class":356},[350,2152,2081],{"class":356},[350,2154,1366],{"class":356},[350,2156,1725],{"class":378},[350,2158,1366],{"class":356},[350,2160,1213],{"class":356},[350,2162,2163],{"class":374}," 5",[350,2165,680],{"class":356},[350,2167,2033],{"class":356},[350,2169,985],{"class":378},[350,2171,1366],{"class":356},[350,2173,1213],{"class":356},[350,2175,2033],{"class":356},[350,2177,2178],{"class":716},"9f0c4d2e-5a1b-4c3d-8e7f-0a1b2c3d4e5f",[350,2180,1366],{"class":356},[350,2182,680],{"class":356},[350,2184,2033],{"class":356},[350,2186,2187],{"class":378},"result",[350,2189,1366],{"class":356},[350,2191,1213],{"class":356},[350,2193,2081],{"class":356},[350,2195,1366],{"class":356},[350,2197,2198],{"class":374},"type",[350,2200,1366],{"class":356},[350,2202,1213],{"class":356},[350,2204,2033],{"class":356},[350,2206,1803],{"class":716},[350,2208,1366],{"class":356},[350,2210,680],{"class":356},[350,2212,2033],{"class":356},[350,2214,2215],{"class":374},"url",[350,2217,1366],{"class":356},[350,2219,1213],{"class":356},[350,2221,2033],{"class":356},[350,2223,2224],{"class":716},"https:\u002F\u002Ffiles.example.com\u002F3e1f6a2b-7c4d-4e5f-9a0b-1c2d3e4f5a6b.csv?expires=1796205600&signature=…",[350,2226,1366],{"class":356},[350,2228,680],{"class":356},[350,2230,2033],{"class":356},[350,2232,2026],{"class":374},[350,2234,1366],{"class":356},[350,2236,1213],{"class":356},[350,2238,2033],{"class":356},[350,2240,1856],{"class":716},[350,2242,1366],{"class":356},[350,2244,2245],{"class":356},"}}}\n",[313,2247,2248,2251,2252,2255,2256,1213],{},[328,2249,2250],{},"respond()"," runs once the jobs are pushed, before they run. The client follows the batch, then downloads the file once ",[328,2253,2254],{},"finished"," is ",[328,2257,2258],{},"true",[341,2260,2262],{"className":1988,"code":2261,"language":1990,"meta":346,"style":346},"GET \u002Fapi\u002Ftickets\u002Factions\u002Fexport-tickets\u002Fbatches\u002F9f0c4d2e-5a1b-4c3d-8e7f-0a1b2c3d4e5f\n",[328,2263,2264],{"__ignoreMap":346},[350,2265,2266],{"class":352,"line":353},[350,2267,2261],{},[341,2269,2274],{"className":2270,"code":2272,"language":2273,"meta":346},[2271],"language-text","title,id\n\"Printer jam, floor 2\",8\n\"Password reset\",9\n\"Monitor flicker\",12\n\"Badge reader\",13\n\"Desk phone\",14\n","text",[328,2275,2272],{"__ignoreMap":346},[313,2277,2278,2279,334],{},"A search that matches no row pushes no job and writes no file, so the action answers a message: ",[328,2280,2281],{},"{\"type\": \"message\", \"message\": \"No rows to export.\"}",[336,2283,2285],{"id":2284},"how-it-works","How it works",[2287,2288,2289,2324,2353,2367,2380],"ul",{},[2290,2291,2292,2296,2297,2300,2301,2304,2305,2308,2309,2312,2313,2316,2317,2320,2321,334],"li",{},[2293,2294,2295],"strong",{},"Rows."," ",[328,2298,2299],{},"handle()"," receives each chunk of the rows that the search matches inside the ",[317,2302,2303],{"href":55},"perimeter"," of the resource. The worker loads them again by key, as the user who sent the request. A chunk holds ",[328,2306,2307],{},"$chunkCount"," rows, or more when the rows need more than ",[328,2310,2311],{},"rest.limits.sizes.jobs"," jobs (",[328,2314,2315],{},"100","). ",[328,2318,2319],{},"$maxResources"," caps the rows of one export: more is a ",[328,2322,2323],{},"422",[2290,2325,2326,2296,2329,2331,2332,2334,2335,2337,2338,2341,2342,2344,2345,2348,2349,2352],{},[2293,2327,2328],{},"Columns.",[328,2330,886],{}," is a ",[328,2333,648],{}," field. ",[328,2336,911],{}," and ",[328,2339,2340],{},"Rule::in()"," accept only a list of the allowed names; anything else is a ",[328,2343,2323],{}," under ",[328,2346,2347],{},"fields.columns",". ",[328,2350,2351],{},"only()"," returns the values in the order the client gave.",[2290,2354,2355,2358,2359,2362,2363,2366],{},[2293,2356,2357],{},"Parts."," The jobs of a batch can run at the same time, so each job writes its own part, named after the first key of its chunk. Once every job succeeded, the ",[328,2360,2361],{},"then()"," callback of the batch joins the parts in that order under a header row. Without ",[328,2364,2365],{},"sorts",", the chunks follow the key, so the file lists the rows by key.",[2290,2368,2369,2372,2373,1978,2376,2379],{},[2293,2370,2371],{},"Labels."," To name the columns from the labels of the resource's fields, build the header in ",[328,2374,2375],{},"withBatch()",[328,2377,2378],{},"$this->resource->definition()->fields()->get($column)->getLabel() ?? $column"," for each column.",[2290,2381,2382,2385,2386,2388],{},[2293,2383,2384],{},"XLSX."," Keep the CSV parts and write the joined file in ",[328,2387,2361],{}," with any spreadsheet writer library. The rest stays the same.",[2390,2391,2392],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .svl4J, html code.shiki .svl4J{--shiki-light:#F76D47;--shiki-light-font-style:italic;--shiki-default:#F78C6C;--shiki-default-font-style:italic;--shiki-dark:#F78C6C;--shiki-dark-font-style:italic}html pre.shiki code .sFweD, html code.shiki .sFweD{--shiki-light:#E2931D;--shiki-light-font-style:italic;--shiki-default:#FFCB6B;--shiki-default-font-style:italic;--shiki-dark:#FFCB6B;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":346,"searchDepth":353,"depth":364,"links":2394},[2395,2396,2397],{"id":338,"depth":364,"text":339},{"id":1984,"depth":364,"text":1985},{"id":2284,"depth":364,"text":2285},"Export the rows of a search to a CSV file in the background, in the columns the client picks, with a queued, batched action.","md",null,{},{"title":144,"description":2398},{"loc":145},"VlJd9rSFvmG9RLWtpyK1phguUdFO8s3VlCmWtVlL5GQ",[2406,2408],{"title":140,"path":141,"stem":142,"description":2407,"children":-1},"Compute counts, totals, breakdowns, trends and top lists over the rows of a resource, with ranges, time zones and a result cache.",{"title":154,"path":155,"stem":156,"description":2409,"children":-1},"How Laravel policies guard each endpoint, each resource a request reaches and each row it writes, before validation and before any query.",1794181355184]