Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Commit

Permalink
Merge pull request #23 from spiral/hotfix/exclude_columns_for_withrel…
Browse files Browse the repository at this point in the history
…ation

H exclude columns in select for WITH-relation
  • Loading branch information
wolfy-j authored Mar 14, 2018
2 parents e835ee7 + 343d881 commit e45a486
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 30 deletions.
7 changes: 4 additions & 3 deletions source/Spiral/ORM/Entities/Loaders/AbstractLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -259,19 +259,20 @@ final public function __destruct()

/**
* @param SelectQuery $query
* @param bool $loadColumns
*
* @return SelectQuery
*/
protected function configureQuery(SelectQuery $query): SelectQuery
protected function configureQuery(SelectQuery $query, bool $loadColumns = true): SelectQuery
{
foreach ($this->loaders as $loader) {
if ($loader instanceof RelationLoader && $loader->isJoined()) {
$query = $loader->configureQuery(clone $query);
$query = $loader->configureQuery(clone $query, $loadColumns);
}
}

foreach ($this->joiners as $loader) {
$query = $loader->configureQuery(clone $query);
$query = $loader->configureQuery(clone $query, false);
}

return $query;
Expand Down
6 changes: 3 additions & 3 deletions source/Spiral/ORM/Entities/Loaders/BelongsToLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ class BelongsToLoader extends RelationLoader
/**
* {@inheritdoc}
*/
protected function configureQuery(SelectQuery $query, array $outerKeys = []): SelectQuery
protected function configureQuery(SelectQuery $query, bool $loadColumns = true, array $outerKeys = []): SelectQuery
{
if (!empty($this->options['using'])) {
//Use pre-defined query
return parent::configureQuery($query, $outerKeys);
return parent::configureQuery($query, $loadColumns, $outerKeys);
}

if ($this->isJoined()) {
Expand All @@ -59,7 +59,7 @@ protected function configureQuery(SelectQuery $query, array $outerKeys = []): Se
);
}

return parent::configureQuery($query);
return parent::configureQuery($query, $loadColumns);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions source/Spiral/ORM/Entities/Loaders/HasManyLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,11 @@ public function __construct($class, $relation, array $schema, ORMInterface $orm)
/**
* {@inheritdoc}
*/
protected function configureQuery(SelectQuery $query, array $outerKeys = []): SelectQuery
protected function configureQuery(SelectQuery $query, bool $loadColumns = true, array $outerKeys = []): SelectQuery
{
if (!empty($this->options['using'])) {
//Use pre-defined query
return parent::configureQuery($query, $outerKeys);
return parent::configureQuery($query, $loadColumns, $outerKeys);
}

if ($this->isJoined()) {
Expand Down Expand Up @@ -112,7 +112,7 @@ protected function configureQuery(SelectQuery $query, array $outerKeys = []): Se
);
}

return parent::configureQuery($query);
return parent::configureQuery($query, $loadColumns);
}

/**
Expand Down
7 changes: 4 additions & 3 deletions source/Spiral/ORM/Entities/Loaders/HasOneLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,17 @@ class HasOneLoader extends RelationLoader
'alias' => null,
'using' => null,
'where' => null,
'load' => false
];

/**
* {@inheritdoc}
*/
protected function configureQuery(SelectQuery $query, array $outerKeys = []): SelectQuery
protected function configureQuery(SelectQuery $query, bool $loadColumns = true, array $outerKeys = []): SelectQuery
{
if (!empty($this->options['using'])) {
//Use pre-defined query
return parent::configureQuery($query, $outerKeys);
return parent::configureQuery($query, $loadColumns, $outerKeys);
}

if ($this->isJoined()) {
Expand Down Expand Up @@ -81,7 +82,7 @@ protected function configureQuery(SelectQuery $query, array $outerKeys = []): Se
);
}

return parent::configureQuery($query);
return parent::configureQuery($query, $loadColumns);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions source/Spiral/ORM/Entities/Loaders/ManyToManyLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ public function __construct(
*
* Visibility up.
*/
public function configureQuery(SelectQuery $query, array $outerKeys = []): SelectQuery
public function configureQuery(SelectQuery $query, bool $loadColumns = true, array $outerKeys = []): SelectQuery
{
if (!empty($this->options['using'])) {
//Use pre-defined query
return parent::configureQuery($query, $outerKeys);
return parent::configureQuery($query, $loadColumns, $outerKeys);
}

if ($this->isJoined()) {
Expand Down Expand Up @@ -152,7 +152,7 @@ public function configureQuery(SelectQuery $query, array $outerKeys = []): Selec
//User specified WHERE conditions
$this->setWhere($query, $this->getAlias(), $whereTarget, $this->options['where']);

return parent::configureQuery($query);
return parent::configureQuery($query, $loadColumns);
}

/**
Expand Down
19 changes: 11 additions & 8 deletions source/Spiral/ORM/Entities/Loaders/RelationLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public function loadData(AbstractNode $node)
}

//Ensure all nested relations
$statement = $this->configureQuery($this->createQuery(), $references)->run();
$statement = $this->configureQuery($this->createQuery(), true, $references)->run();
$statement->setFetchMode(\PDO::FETCH_NUM);

foreach ($statement as $row) {
Expand All @@ -161,18 +161,21 @@ public function loadData(AbstractNode $node)
* Configure query with conditions, joins and columns.
*
* @param SelectQuery $query
* @param bool $loadColumns
* @param array $outerKeys Set of OUTER_KEY values collected by parent loader.
*
* @return SelectQuery
*/
protected function configureQuery(SelectQuery $query, array $outerKeys = []): SelectQuery
protected function configureQuery(SelectQuery $query, bool $loadColumns = true, array $outerKeys = []): SelectQuery
{
if ($this->isJoined()) {
//Mounting columns
$this->mountColumns($query, $this->options['minify']);
} else {
//This is initial set of columns (remove all existed)
$this->mountColumns($query, $this->options['minify'], '', true);
if ($loadColumns) {
if ($this->isJoined()) {
//Mounting columns
$this->mountColumns($query, $this->options['minify']);
} else {
//This is initial set of columns (remove all existed)
$this->mountColumns($query, $this->options['minify'], '', true);
}
}

return parent::configureQuery($query);
Expand Down
9 changes: 6 additions & 3 deletions source/Spiral/ORM/Entities/Loaders/RootLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -120,18 +120,21 @@ public function getAlias(): string

/**
* @param SelectQuery $query
* @param bool $loadColumns
*
* @return SelectQuery
*/
protected function configureQuery(SelectQuery $query): SelectQuery
protected function configureQuery(SelectQuery $query, bool $loadColumns = true): SelectQuery
{
//Clarifying table name
$query->from("{$this->getTable()} AS {$this->getAlias()}");

//Columns to be loaded for primary model
$this->mountColumns($query, true, '', true);
if ($loadColumns) {
$this->mountColumns($query, true, '', true);
}

return parent::configureQuery($query);
return parent::configureQuery($query, $loadColumns);
}

/**
Expand Down
13 changes: 10 additions & 3 deletions source/Spiral/ORM/Entities/RecordSelector.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use Spiral\ORM\Exceptions\SelectorException;
use Spiral\ORM\ORMInterface;
use Spiral\ORM\RecordInterface;
use Spiral\Pagination\CountingInterface;
use Spiral\Pagination\PaginatorAwareInterface;
use Spiral\Pagination\PaginatorInterface;

Expand Down Expand Up @@ -442,13 +443,13 @@ public function compiledQuery(): SelectQuery
{
return $this->loader->compiledQuery();
}

/**
* Compiled SQL statement.
*
* @return string
*/
public function sqlStatement(): string
public function sqlStatement(): string
{
return $this->loader->compiledQuery()->sqlStatement();
}
Expand Down Expand Up @@ -493,7 +494,13 @@ public function setPaginator(PaginatorInterface $paginator)
*/
public function getPaginator(bool $prepare = true): PaginatorInterface
{
return $this->loader->compiledQuery()->getPaginator($prepare);
$paginator = $this->loader->compiledQuery()->getPaginator(false);

if ($prepare && $paginator instanceof CountingInterface) {
$paginator = $paginator->withCount($this->count());
}

return $paginator;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ protected function createQuery($innerKey): SelectQuery

//Configuring query using parent inner key value as reference
/** @var ManyToManyLoader $loader */
$query = $loader->configureQuery($query, [$innerKey]);
$query = $loader->configureQuery($query, true, [$innerKey]);

//Additional pivot conditions
$pivotDecorator = new AliasDecorator($query, 'onWhere', $table->getName() . '_pivot');
Expand Down

0 comments on commit e45a486

Please sign in to comment.