orm relation filter in clone
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user