Skip to content

Commit

Permalink
Merge pull request #1 from cepaim/cepaim-prepareModels-union
Browse files Browse the repository at this point in the history
Update ActiveDataProvider::prepareModels() to avoid SQL error with UNION queries
  • Loading branch information
cepaim committed Aug 16, 2024
2 parents 34d2396 + 6356e60 commit a1807f9
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions framework/data/ActiveDataProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,17 +101,29 @@ protected function prepareModels()
throw new InvalidConfigException('The "query" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses.');
}
$query = clone $this->query;

$has_union = $query->union && count($query->union);
if (($pagination = $this->getPagination()) !== false) {
$pagination->totalCount = $this->getTotalCount();
if ($pagination->totalCount === 0) {
return [];
}
$query->limit($pagination->getLimit())->offset($pagination->getOffset());
if ($has_union) {
$query->union[count($query->union)-1]['query']->limit($pagination->getLimit())->offset($pagination->getOffset());

Check failure on line 112 in framework/data/ActiveDataProvider.php

View workflow job for this annotation

GitHub Actions / PHP_CodeSniffer

Expected at least 1 space before "-"; 0 found

Check failure on line 112 in framework/data/ActiveDataProvider.php

View workflow job for this annotation

GitHub Actions / PHP_CodeSniffer

Expected at least 1 space after "-"; 0 found

Check warning on line 112 in framework/data/ActiveDataProvider.php

View check run for this annotation

Codecov / codecov/patch

framework/data/ActiveDataProvider.php#L112

Added line #L112 was not covered by tests
} else {
$query->limit($pagination->getLimit())->offset($pagination->getOffset());
}
}
if (($sort = $this->getSort()) !== false) {
$query->addOrderBy($sort->getOrders());
}

Check failure on line 119 in framework/data/ActiveDataProvider.php

View workflow job for this annotation

GitHub Actions / PHP_CodeSniffer

Whitespace found at end of line
if ($has_union) {
if ($query->orderBy) {
$query->union[count($query->union)-1]['query']->addOrderBy($query->orderBy);

Check failure on line 122 in framework/data/ActiveDataProvider.php

View workflow job for this annotation

GitHub Actions / PHP_CodeSniffer

Expected at least 1 space before "-"; 0 found

Check failure on line 122 in framework/data/ActiveDataProvider.php

View workflow job for this annotation

GitHub Actions / PHP_CodeSniffer

Expected at least 1 space after "-"; 0 found
$query->orderBy = null;

Check warning on line 123 in framework/data/ActiveDataProvider.php

View check run for this annotation

Codecov / codecov/patch

framework/data/ActiveDataProvider.php#L121-L123

Added lines #L121 - L123 were not covered by tests
}
}

Check failure on line 126 in framework/data/ActiveDataProvider.php

View workflow job for this annotation

GitHub Actions / PHP_CodeSniffer

Whitespace found at end of line
return $query->all($this->db);
}

Expand Down

0 comments on commit a1807f9

Please sign in to comment.