Merge pull request #15181 from bzy107/fix-order-due-to-using-chunks

Fix: Add conditions to DISTINCT and modify reorder conditions in PostgreSQL
This commit is contained in:
Dan Harrin
2025-01-02 08:32:05 +00:00
committed by GitHub
@@ -69,13 +69,18 @@ class PrepareCsvExport implements ShouldQueue
if ($databaseConnection->getDriverName() === 'pgsql') {
$originalOrders = collect($query->getQuery()->orders)
->reject(fn (array $order): bool => in_array($order['column'] ?? null, [$keyName, $qualifiedKeyName]))
->reject(fn (array $order): bool => ($order['column'] ?? null) === $qualifiedKeyName)
->unique('column');
/** @var array<string, mixed> $originalBindings */
$originalBindings = $query->getRawBindings();
$query->reorder($qualifiedKeyName);
if (! empty($originalOrders->all())) {
$query->reorder($originalOrders[0]['column'], $originalOrders[0]['direction']);
$originalOrders->forget(0);
} else {
$query->reorder($qualifiedKeyName);
}
foreach ($originalOrders as $order) {
if (blank($order['column'] ?? null) || blank($order['direction'] ?? null)) {
@@ -144,7 +149,10 @@ class PrepareCsvExport implements ShouldQueue
$chunkKeySize = $this->chunkSize * 10;
$baseQuery = $query->toBase();
$baseQuery->distinct($qualifiedKeyName);
if (in_array($query->getQuery()->orders[0]['column'] ?? null, [$keyName, $qualifiedKeyName])) {
$baseQuery->distinct($qualifiedKeyName);
}
/** @phpstan-ignore-next-line */
$baseQueryOrders = $baseQuery->orders ?? [];