/** * @param Lib_Model $from */ protected function settingsJoin($from) { foreach ($from->_settingsJoined as $name => $value) { // join external from externals perspective $this->settingJoin($name, $value); } $fromAlias = $from->getAlias(); foreach ($from->getColumns() as $descriptor) { // join local from externals perspective $table = $descriptor[0]; $column = $descriptor[1]; $alias = $descriptor[2]; if ($table === $fromAlias) { if ($alias) { // has alias, just join if ($from->settingExists($alias)) { $this->settingJoin($alias, $from->getSetting($alias)); } elseif ($from->settingExists($column)) { $this->settingJoin($alias, $from->getSetting($column)); } } elseif ($from->settingExists($column)) { // needs to be aliased $this->settingJoin("{$table}.{$column}", $from->getSetting($column)); } } } }