|
@@ -305,7 +305,8 @@ class ResultSet implements Countable, Iterator, Serializable, JsonSerializable {
|
|
|
$map = [];
|
|
$map = [];
|
|
|
$visitor = function($level) use (&$visitor, &$map) {
|
|
$visitor = function($level) use (&$visitor, &$map) {
|
|
|
foreach ($level as $assoc => $meta) {
|
|
foreach ($level as $assoc => $meta) {
|
|
|
- $map[$assoc] = [
|
|
|
|
|
|
|
+ $map[$meta['aliasPath']] = [
|
|
|
|
|
+ 'alias' => $assoc,
|
|
|
'instance' => $meta['instance'],
|
|
'instance' => $meta['instance'],
|
|
|
'canBeJoined' => $meta['canBeJoined'],
|
|
'canBeJoined' => $meta['canBeJoined'],
|
|
|
'entityClass' => $meta['instance']->target()->entityClass()
|
|
'entityClass' => $meta['instance']->target()->entityClass()
|
|
@@ -350,6 +351,11 @@ class ResultSet implements Countable, Iterator, Serializable, JsonSerializable {
|
|
|
$table = $defaultAlias;
|
|
$table = $defaultAlias;
|
|
|
$field = $key;
|
|
$field = $key;
|
|
|
|
|
|
|
|
|
|
+ if (strpos($key, '___collection_') !== false) {
|
|
|
|
|
+ $results[$key] = $value;
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (empty($this->_map[$key])) {
|
|
if (empty($this->_map[$key])) {
|
|
|
$parts = explode('__', $key);
|
|
$parts = explode('__', $key);
|
|
|
if (count($parts) > 1) {
|
|
if (count($parts) > 1) {
|
|
@@ -377,21 +383,27 @@ class ResultSet implements Countable, Iterator, Serializable, JsonSerializable {
|
|
|
'markNew' => false,
|
|
'markNew' => false,
|
|
|
'guard' => false
|
|
'guard' => false
|
|
|
];
|
|
];
|
|
|
- foreach (array_reverse($this->_associationMap) as $alias => $assoc) {
|
|
|
|
|
- if (!isset($results[$alias])) {
|
|
|
|
|
|
|
+ foreach (array_reverse($this->_associationMap) as $assoc) {
|
|
|
|
|
+ $alias = $assoc['alias'];
|
|
|
|
|
+ if (!isset($results[$alias]) && !isset($results[$alias . '___collection_'])) {
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
$instance = $assoc['instance'];
|
|
$instance = $assoc['instance'];
|
|
|
$target = $instance->target();
|
|
$target = $instance->target();
|
|
|
- $results[$alias] = $this->_castValues($target, $results[$alias]);
|
|
|
|
|
- unset($presentAliases[$alias]);
|
|
|
|
|
$options['source'] = $target->alias();
|
|
$options['source'] = $target->alias();
|
|
|
|
|
+ unset($presentAliases[$alias]);
|
|
|
|
|
+
|
|
|
|
|
+ if ($assoc['canBeJoined']) {
|
|
|
|
|
+ $results[$alias] = $this->_castValues($target, $results[$alias]);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
if ($this->_hydrate && $assoc['canBeJoined']) {
|
|
if ($this->_hydrate && $assoc['canBeJoined']) {
|
|
|
$entity = new $assoc['entityClass']($results[$alias], $options);
|
|
$entity = new $assoc['entityClass']($results[$alias], $options);
|
|
|
$entity->clean();
|
|
$entity->clean();
|
|
|
$results[$alias] = $entity;
|
|
$results[$alias] = $entity;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
$results = $instance->transformRow($results);
|
|
$results = $instance->transformRow($results);
|
|
|
}
|
|
}
|
|
|
|
|
|