public function __get($var) { $model = unCamelize($var); if (file_exists(INST_PATH . 'app/models/' . $model . '.php')) { if (!class_exists($var)) { require INST_PATH . 'app/models/' . $model . '.php'; } $obj = new $var(); return $obj; } }
/** * * Get or set the name of the table. * @param string $name */ public function _TableName($name = null) { if (!empty($name)) { $this->_ObjTable = $name; } elseif (empty($this->_ObjTable) or strlen($this->_ObjTable) < 1) { $className = unCamelize(get_class($this)); $words = explode("_", $className); $i = sizeof($words) - 1; $words[$i] = Plurals($words[$i]); $this->_ObjTable = implode("_", $words); } return $this->_ObjTable; }
/** * método mágico __call() * * Este método es ejecutado por PHP cuando se accede a un m?todo que no existe. * A través de este método mágico se realiza el mapeo relacional, asumiendo que el llamado * a un método, es el llamado a un modelo realiza la subconsulta según las condiciones de relación y devuelve el * objeto del modelo requerido. * Es imperativo que las variables {@link $has_many}, {@link $belongs_to}, {@link $has_one}, {@link $has_and_belongs_to}, * estén correctamente creadas con las tablas a las que tienen su relación. * Tambien define el comportamiento cuando se hace un llamado a un método no definido en la clase, invocando a la función * definida en las extensiones. * Incluso define el comportamiento del método Find_by_{campo_en_la_tabla}(). * * @param string $ClassName Nombre del método al que se invoca. * @param mixed $val Valor pasado por parámetro dentro del método. */ public function __call($ClassName, $val = NULL) { $field = Singulars(strtolower($ClassName)); $classFromCall = Camelize($ClassName); if (preg_match('/Find_by_/', $ClassName)) { $nustring = str_replace("Find_by_", '', $ClassName); return $this->Find(array('conditions' => '`' . $nustring . "`='" . $val[0] . "'")); } elseif (file_exists(INST_PATH . 'app/models/' . $field . '.php')) { $way = isset($val[0]) ? $val[0] : 'down'; $foreign = strtolower($field) . "_id"; $prefix = unCamelize(get_class($this)); if (!class_exists($classFromCall)) { require_once INST_PATH . 'app/models/' . $field . '.php'; } $obj1 = new $classFromCall(); $conditions = "`" . $prefix . "_id`='" . $this->id . "'"; if (get_parent_class($obj1) == 'ActiveRecord') { if ($classFromCall == get_class($this) and in_array($ClassName, $this->has_many_and_belongs_to)) { $conditions = $way == 'up' ? "id='" . $this->{$foreign} . "'" : $conditions; } elseif (in_array($ClassName, $this->belongs_to)) { $conditions = "id='" . $this->{$foreign} . "'"; } return $conditions !== NULL ? $obj1->Find(array('conditions' => $conditions)) : $obj1->Niu(); } return NULL; } else { return $ClassName($val, $this); } }