/** * @param $name * @param $alias * @return Model_Query * @throws \Exception */ public function createQuery($name, $alias = null) { if (isset(self::$models[$name])) { $query = new Model_Query($name, Database::getCurrentDB(), $alias); return $query; } $trace = debug_backtrace(); throw new \Exception(sprintf('Not Found model : %s of %s line %d', $name, $trace[0]['file'], $trace[0]['line'])); }
function __construct() { $this->db = Database::getCurrentDB(); $this->table_options = array("engine" => Database::ENGINE_DEFAULT); $parents_class = class_parents($this); $class_name = get_class($this); $class = array_merge($parents_class, array($class_name => $class_name)); $this->table_fields = array(); foreach ($class as $class_name) { $fields = null; if (isset(self::$class_fields[$class_name])) { $fields = self::$class_fields[$class_name]; } else { $fields = array(); $vars = get_class_vars($class_name); foreach ($vars as $k => $v) { $method_name = str_replace('_', '', $k); if (method_exists($this, $method_name . 'Column')) { $v = $method_name . 'Column'; $key = $k; try { $field = $this->{$v}(); } catch (PMPException $e) { throw new PMPException($class_name . '->' . $v . '() is return value error.' . $e->getMessage()); } if ($field && is_object($field) && $field instanceof ModelColumn) { if (!$field->getName()) { $field->setName($key); } $fields[$key] = $field; if ($field->isCompareColumn()) { $self = $field->getSelfColumn(); if (!isset(self::$from_connection[$class_name])) { self::$from_connection[$class_name] = array(); } if (!isset(self::$from_connection[$class_name][$self])) { self::$from_connection[$class_name][$self] = array(); } self::$from_connection[$class_name][$self][$k] = $k; } } else { throw new PMPException($class_name . '->' . $v . '() must be return ModelColumn'); } } } self::$class_fields[$class_name] = $fields; } if ($fields) { foreach ($fields as $k => $f) { $this->table_fields[$k] = $f; } } } }