Skip to content

Commit

Permalink
Merge pull request #202 from FriendsOfCake/associations
Browse files Browse the repository at this point in the history
Fix all associations being fetched even if scaffold.relations was set…
  • Loading branch information
ADmad authored Aug 9, 2017
2 parents 600a7cc + 7b5a287 commit 6f022cc
Showing 1 changed file with 33 additions and 15 deletions.
48 changes: 33 additions & 15 deletions src/Listener/ViewListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class ViewListener extends BaseListener
*
* @var array
*/
protected $associations = [];
protected $associations = null;

/**
* [beforeFind description]
Expand All @@ -38,9 +38,15 @@ class ViewListener extends BaseListener
*/
public function beforeFind(Event $event)
{
$this->associations = $this->_associations(array_keys($this->_getRelatedModels()));
$related = $this->_getRelatedModels();
if ($related === []) {
$this->associations = [];
} else {
$this->associations = $this->_associations(array_keys($related));
}

if (!$event->getSubject()->query->contain()) {
$event->getSubject()->query->contain($this->_getRelatedModels());
$event->getSubject()->query->contain($related);
}
}

Expand All @@ -52,7 +58,13 @@ public function beforeFind(Event $event)
*/
public function beforePaginate(Event $event)
{
$this->associations = $this->_associations(array_keys($this->_getRelatedModels()));
$related = $this->_getRelatedModels();
if ($related === []) {
$this->associations = [];
} else {
$this->associations = $this->_associations(array_keys($related));
}

if (!$event->getSubject()->query->contain()) {
$event->getSubject()->query->contain($this->_getRelatedModels(['manyToOne', 'oneToOne']));
}
Expand All @@ -74,7 +86,7 @@ public function beforeRender(Event $event)
$this->_entity = $event->getSubject()->entity;
}

if (empty($this->associations)) {
if ($this->associations === null) {
$this->associations = $this->_associations(array_keys($this->_getRelatedModels()));
}

Expand Down Expand Up @@ -174,16 +186,16 @@ protected function _getBreadcrumbs()
/**
* Get a list of relevant models to contain using Containable
*
* If the user haven't configured any relations for an action
* If the user hasn't configured any relations for an action
* we assume all relations will be used.
*
* The user can chose to suppress specific relations using the blacklist
* The user can choose to suppress specific relations using the blacklist
* functionality.
*
* @param string[] $relations List of relations.
* @param string[] $associationTypes List of association types.
* @return array
*/
protected function _getRelatedModels($relations = [])
protected function _getRelatedModels($associationTypes = [])
{
$models = $this->_action()->getConfig('scaffold.relations');

Expand All @@ -192,15 +204,21 @@ protected function _getRelatedModels($relations = [])
}

if (empty($models)) {
$associations = $this->_associations();

if (empty($relations)) {
$relations = array_keys($associations);
$associations = [];
if (empty($associationTypes)) {
$associations = $this->_table()->associations();
} else {
foreach ($associationTypes as $assocType) {
$associations = array_merge(
$associations,
$this->_table()->associations()->type($assocType)
);
}
}

$models = [];
foreach ($relations as $relation) {
$models = Hash::merge($models, Hash::extract($associations, "$relation.{s}.model"));
foreach ($associations as $assoc) {
$models[] = $assoc->name();
}
}

Expand Down

0 comments on commit 6f022cc

Please sign in to comment.