orm relation filter in clone

This commit is contained in:
Yuri Kuznetsov
2021-07-23 14:04:53 +03:00
parent e46a2089dd
commit 51f6d27edf
2 changed files with 32 additions and 5 deletions
+13
View File
@@ -29,6 +29,8 @@
namespace Espo\ORM\Query;
use Espo\ORM\Query\Part\WhereClause;
use RuntimeException;
/**
@@ -85,6 +87,17 @@ class Select implements SelectingQuery
return $this->params['orderBy'] ?? [];
}
public function getWhere(): ?WhereClause
{
$whereClause = $this->params['whereClause'] ?? null;
if ($whereClause === null || $whereClause === []) {
return null;
}
return WhereClause::fromRaw($whereClause);
}
private function validateRawParams(array $params): void
{
$this->validateRawParamsSelecting($params);
@@ -88,12 +88,26 @@ class RDBRelationSelectBuilder
$this->foreignEntityType = $entity->getRelationParam($relationName, 'entity');
if ($query) {
$this->builder = $this->createSelectBuilder()->clone($query);
}
else {
$this->builder = $this->createSelectBuilder()->from($this->foreignEntityType);
$this->builder = $query ?
$this->cloneQueryToBuilder($query) :
$this->createSelectBuilder()->from($this->foreignEntityType);
}
private function cloneQueryToBuilder(Select $query): SelectBuilder
{
$where = $query->getWhere();
if ($where === null) {
return $this->createSelectBuilder()->clone($query);
}
$rawQuery = $query->getRaw();
$rawQuery['whereClause'] = $this->applyRelationAliasToWhereClause($where->getRaw());
$newQuery = Select::fromRaw($rawQuery);
return $this->createSelectBuilder()->clone($newQuery);
}
protected function createSelectBuilder(): SelectBuilder