diff --git a/packages/actions/src/Exports/Jobs/PrepareCsvExport.php b/packages/actions/src/Exports/Jobs/PrepareCsvExport.php index 70a4592112d..0f0b02e65a2 100644 --- a/packages/actions/src/Exports/Jobs/PrepareCsvExport.php +++ b/packages/actions/src/Exports/Jobs/PrepareCsvExport.php @@ -9,6 +9,7 @@ use Illuminate\Bus\Queueable; use Illuminate\Contracts\Filesystem\Filesystem; use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Database\Connection; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; @@ -63,6 +64,21 @@ public function handle(): void $keyName = $query->getModel()->getKeyName(); $qualifiedKeyName = $query->getModel()->getQualifiedKeyName(); + /** @var Connection $databaseConnection */ + $databaseConnection = $query->getConnection(); + + if ($databaseConnection->getDriverName() === 'pgsql') { + $originalOrders = collect($query->getQuery()->orders) + ->reject(fn (array $order): bool => in_array($order['column'] ?? null, [$keyName, $qualifiedKeyName])) + ->unique('column'); + + $query->reorder($qualifiedKeyName); + + foreach ($originalOrders as $order) { + $query->orderBy($order['column'], $order['direction']); + } + } + $exportCsvJob = $this->getExportCsvJob(); $totalRows = 0;