/** * @return Model */ public function model($namespace, $alias = 'a') { $instance = null; if (is_object($namespace)) { $instance = $namespace; } else { if (strpos($namespace, ':')) { $namespace = Util::getNamespaceModel($namespace); } if (!class_exists($namespace)) { throw new \Exception("El modelo '{$namespace}' no fue encontrado."); } $instance = new $namespace(); } $this->propertiesInstance = $this->getPropertiesInstance($instance); $this->propertiesInstance['alias'] = $alias; $this->Model->setPropertiesInstance($this->propertiesInstance, $this); return $this->Model; }
private function buildJoin($namespace, $alias, $type_join) { $QueryBuilder = $this->getQueryBuilder(); $type_join = strtoupper($type_join); if (strpos($namespace, ':')) { $shortNamespace = $namespace; $namespace = Util::getNamespaceModel($namespace); } else { $shortNamespace = Util::getShortNamespaceModel($namespace); } $instance = new $namespace(); $relations = $this->propertiesInstance['instance']->getDefinitionRelations(); if (array_key_exists($shortNamespace, $relations)) { $QueryBuilder->from($this->propertiesInstance['table'], $this->propertiesInstance['alias']); if ($type_join == 'INNER_JOIN') { $QueryBuilder->innerJoin($this->propertiesInstance['alias'], $this->propertiesInstance['prefix'] . $instance::table, $alias, "{$alias}." . $instance::primary . " = {$this->propertiesInstance['alias']}.{$relations[$shortNamespace]['fieldLocal']}"); } else { if ($type_join == 'LEFT_JOIN') { $QueryBuilder->leftJoin($this->propertiesInstance['alias'], $this->propertiesInstance['prefix'] . $instance::table, $alias, "{$alias}." . $instance::primary . " = {$this->propertiesInstance['alias']}.{$relations[$shortNamespace]['fieldLocal']}"); } else { if ($type_join == 'RIGHT_JOIN') { $QueryBuilder->rightJoin($this->propertiesInstance['alias'], $this->propertiesInstance['prefix'] . $instance::table, $alias, "{$alias}." . $instance::primary . " = {$this->propertiesInstance['alias']}.{$relations[$shortNamespace]['fieldLocal']}"); } } } } // Si no se ha agregado un selecto se coloca todos los campos de ambos modelos if (count($QueryBuilder->getQueryPart('select')) == 0) { $QueryBuilder->select("{$this->propertiesInstance['alias']}.*, {$alias}.*"); } }
public function setNameModel($namespace) { if (strpos($namespace, ':')) { $namespace = \Kodazzi\Tools\Util::getNamespaceModel($namespace); } $this->name_model = $namespace; }