mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Various bugfixes in model associations lazy loafing for "with" associations
This commit is contained in:
parent
fdf91194a6
commit
96f834a7ea
1 changed files with 19 additions and 11 deletions
|
@ -512,11 +512,19 @@ class Model extends Object {
|
||||||
break;
|
break;
|
||||||
} else if ($type == 'hasAndBelongsToMany') {
|
} else if ($type == 'hasAndBelongsToMany') {
|
||||||
foreach ($this->{$type} as $k => $relation) {
|
foreach ($this->{$type} as $k => $relation) {
|
||||||
if (!empty($relation['with']) && $relation['with'] === $name) {
|
if (empty($relation['with'])) {
|
||||||
$className = $name;
|
continue;
|
||||||
break(2);
|
}
|
||||||
} else if (is_array($relation['with']) && key($relation['with']) === $name) {
|
if (is_array($relation['with']) && key($relation['with']) === $name){
|
||||||
$className = $name;
|
$className = $name;
|
||||||
|
} else {
|
||||||
|
list($plugin, $class) = pluginSplit($relation['with']);
|
||||||
|
if ($class === $name) {
|
||||||
|
$className = $relation['with'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($className) {
|
||||||
|
$assocKey = $k;
|
||||||
break(2);
|
break(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -529,7 +537,12 @@ class Model extends Object {
|
||||||
|
|
||||||
list($plugin, $className) = pluginSplit($className);
|
list($plugin, $className) = pluginSplit($className);
|
||||||
$this->__constructLinkedModel($name, $className, $plugin);
|
$this->__constructLinkedModel($name, $className, $plugin);
|
||||||
|
if (!empty($assocKey)) {
|
||||||
|
$this->hasAndBelongsToMany[$assocKey]['joinTable'] = $this->{$name}->table;
|
||||||
|
if (count($this->{$name}->schema()) <= 2 && $this->{$name}->primaryKey !== false) {
|
||||||
|
$this->{$name}->primaryKey = $this->hasAndBelongsToMany[$assocKey]['foreignKey'];
|
||||||
|
}
|
||||||
|
}
|
||||||
return $this->{$name};
|
return $this->{$name};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -759,12 +772,6 @@ class Model extends Object {
|
||||||
'table' => $this->{$type}[$assocKey]['joinTable'],
|
'table' => $this->{$type}[$assocKey]['joinTable'],
|
||||||
'ds' => $this->useDbConfig
|
'ds' => $this->useDbConfig
|
||||||
));
|
));
|
||||||
} else {
|
|
||||||
$this->{$type}[$assocKey]['joinTable'] = $this->{$joinClass}->table;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count($this->{$joinClass}->schema()) <= 2 && $this->{$joinClass}->primaryKey !== false) {
|
|
||||||
$this->{$joinClass}->primaryKey = $this->{$type}[$assocKey]['foreignKey'];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2875,6 +2882,7 @@ class Model extends Object {
|
||||||
*/
|
*/
|
||||||
public function joinModel($assoc, $keys = array()) {
|
public function joinModel($assoc, $keys = array()) {
|
||||||
if (is_string($assoc)) {
|
if (is_string($assoc)) {
|
||||||
|
list(, $assoc) = pluginSplit($assoc);
|
||||||
return array($assoc, array_keys($this->{$assoc}->schema()));
|
return array($assoc, array_keys($this->{$assoc}->schema()));
|
||||||
} elseif (is_array($assoc)) {
|
} elseif (is_array($assoc)) {
|
||||||
$with = key($assoc);
|
$with = key($assoc);
|
||||||
|
|
Loading…
Reference in a new issue