/** * @param $name * @throws \Exception * @return mixed */ protected function getRelatedObject($name) { $relation = $this->table->getRelationInfo($name); $tableClassName = $relation['table']; /** @var $tableClassName \Uc\Core\Db\Table */ $table = $tableClassName::instance(); if ($relation['type'] == $table::RELATION_ONE_TO_ONE) { if (!empty($relation['myField'])) { $pkField = $this->{$relation['myField']}; $item = $table->fetchOne($pkField); } else { $item = $table->fetchOne(array($relation['foreignField'] => $this->pk())); } return $item; } elseif ($relation['type'] == $table::RELATION_ONE_TO_MANY) { if (!empty($relation['foreignField'])) { $items = $table->fetchAll(array($relation['foreignField'] => $this->pk())); } else { if (!empty($relation['myField'])) { $items = $this->table->fetchAll(array($relation['myField'] => $this->pk())); } else { throw new \Uc\Core\Exception('Not valid relation ' . $name . ' in class ' . get_called_class() . '. Please set myField or foreignField'); } } return $items; } elseif ($relation['type'] == $table::RELATION_MANY_TO_MANY) { $select = $table->select(); $relatedTableReference = $relation['reference']; $select->join('LEFT JOIN ' . $relatedTableReference['tableName'] . ' on ' . $table->getTableName() . '.' . $table->pk() . ' = ' . $relatedTableReference['tableName'] . '.' . $relatedTableReference['foreignField']); $select->where($relation['reference']['tableName'] . '.' . $relation['reference']['myField'] . ' = ? ', $this->pk()); $items = $table->fetchAll($select); return $items; } return false; }