pagination: joins

This commit is contained in:
2023-01-09 14:21:11 +01:00
parent d115d8b970
commit 6dcd7031bb
14 changed files with 424 additions and 69 deletions

View File

@@ -21,14 +21,14 @@ trait Pagination {
];
}
function initPagination(SQL $sql, string $class, ?Condition $condition = null, int $maxPageSize = 100): bool {
function initPagination(SQL $sql, string $class, ?Condition $condition = null, int $maxPageSize = 100, ?array $joins = null): bool {
$this->paginationClass = $class;
$this->paginationCondition = $condition;
if (!$this->validateParameters($maxPageSize)) {
return false;
}
$this->entityCount = call_user_func("$this->paginationClass::count", $sql, $condition);
$this->entityCount = call_user_func("$this->paginationClass::count", $sql, $condition, $joins);
if ($this->entityCount === false) {
return $this->createError("Error fetching $this->paginationClass::count: " . $sql->getLastError());
}
@@ -60,7 +60,7 @@ trait Pagination {
return true;
}
function createPaginationQuery(SQL $sql, array $additionalValues = []): DatabaseEntityQuery {
function createPaginationQuery(SQL $sql, ?array $additionalValues = null, ?array $joins = null): DatabaseEntityQuery {
$page = $this->getParam("page");
$count = $this->getParam("count");
$orderBy = $this->getParam("orderBy");
@@ -76,12 +76,18 @@ trait Pagination {
$entityQuery->where($this->paginationCondition);
}
if (!empty($additionalValues)) {
if ($additionalValues) {
foreach ($additionalValues as $additionalValue) {
$entityQuery->addCustomValue($additionalValue);
}
}
if ($joins) {
foreach ($joins as $join) {
$entityQuery->addJoin($join);
}
}
if ($orderBy) {
$handler = $baseQuery->getHandler();
$baseTable = $handler->getTableName();