You shouldn't need to interact with this class directly. It is used internally by the Model base class.
상속: extends ORM
예제 #1
0
파일: ORM.php 프로젝트: rocketgears/orm
 /**
  * @brief Magic method override.
  * 
  * @param string $name - method to call
  * @param array $arguments - parameters for method
  * @return mixed - instance of a ORM_Base derived class | array of ORM_Wrapper | unknown
  * @throws Exception - if unable to identify/locate the method $name
  */
 public function __call($name, $arguments)
 {
     // One to many
     if (isset($this->_to_many[$name])) {
         // Return wrapper
         $return = new ORMWrapper();
         // Get model records
         $prepare = self::$instance->prepare("SELECT * FROM `{$this->_to_many[$name]}` WHERE `{$this->_get_table_name()}_id` = :object_id");
         if ($prepare->execute(array('object_id' => $this->_data["{$this->_get_table_name()}_id"]))) {
             $model_name = str_replace(' ', '_', ucwords(str_replace('_', ' ', $this->_to_many[$name])));
             while ($data = $prepare->fetch(\PDO::FETCH_ASSOC)) {
                 eval('$object = ' . $model_name . '::load(' . $data[$name . "_id"] . ', $data);');
                 $return->push($object);
             }
         }
         return $return;
     }
     // One to one
     if (isset($this->_to_one[$name])) {
         $model_name = str_replace(' ', '_', ucwords(str_replace('_', ' ', $this->_to_one[$name])));
         eval('$return = ' . $model_name . '::load(' . $this->_data[$name . "_id"] . ');');
         return $return;
     }
     throw new ORMException(ORM::$exception_strings[400], 400);
 }
예제 #2
0
파일: paris.php 프로젝트: florinp/dexonline
 /**
  * Factory method used to acquire instances of the given class.
  * The class name should be supplied as a string, and the class
  * should already have been loaded by PHP (or a suitable autoloader
  * should exist). This method actually returns a wrapped ORM object
  * which allows a database query to be built. The wrapped ORM object is
  * responsible for returning instances of the correct class when
  * its find_one or find_many methods are called.
  *
  * @param  string      $class_name
  * @param  null|string $connection_name
  * @return ORMWrapper
  */
 public static function factory($class_name, $connection_name = null)
 {
     $class_name = self::$auto_prefix_models . $class_name;
     $table_name = self::_get_table_name($class_name);
     if ($connection_name == null) {
         $connection_name = self::_get_static_property($class_name, '_connection_name', ORMWrapper::DEFAULT_CONNECTION);
     }
     $wrapper = ORMWrapper::for_table($table_name, $connection_name);
     $wrapper->set_class_name($class_name);
     $wrapper->use_id_column(self::_get_id_column_name($class_name));
     return $wrapper;
 }
예제 #3
0
파일: CRUD.php 프로젝트: cal127/phpcrud
 /**
  * @arg bool raw
  * if raw is true, relational fields are returned their ids.
  */
 public function getRows($raw = false)
 {
     $rows = array();
     foreach ($this->orm->find_many() as $row) {
         foreach ($this->fields as $field) {
             // skip the only non-readable field type:
             if (in_array($field['type'], array('file', 'file_multiple')) || !$field['read']) {
                 continue;
             }
             if ($field['type'] == 'flag') {
                 $map = array('No', 'Yes');
                 $rows[$row->id][$field['name']] = $raw ? $row->{$field}['name'] == '0' ? false : true : $map[$row->{$field}['name']];
                 continue;
             }
             if ($field['type'] != 'rel') {
                 $rows[$row->id][$field['name']] = (string) $row->{$field}['name'];
                 continue;
             }
             switch ($field['rel']['type']) {
                 case 'belongs_to':
                 case 'has_one':
                     if ($raw) {
                         if ($field['rel']['type'] == 'belongs_to') {
                             $val = $row->{$field['rel']['key1']};
                         } else {
                             if ($rel_obj = $row->{$field['rel']['relator_mtd']}()) {
                                 $val = $rel_obj->id;
                             } else {
                                 $val = null;
                             }
                         }
                         break;
                     }
                     if (!($rel_obj = $row->{$field['rel']['relator_mtd']}()) || !($val = $rel_obj->{$field['rel']['related_model_field']})) {
                         $val = null;
                     }
                     break;
                 case 'has_many':
                 case 'has_many_through':
                     if ($rel_obj = $row->{$field['rel']['relator_mtd']}()) {
                         $all_related_values = $rel_obj->find_array();
                     } else {
                         $val = null;
                         break;
                     }
                     if ($raw) {
                         $related_model_field = 'id';
                     } else {
                         $related_model_field = $field['rel']['related_model_field'];
                     }
                     $val = array_map(function ($row) use($related_model_field) {
                         return $row[$related_model_field];
                     }, $all_related_values);
                     break;
             }
             $rows[$row->id][$field['name']] = $val;
         }
         $rows[$row->id] = self::applyCallbacks('pre_read', 1, $rows[$row->id], $this->fields);
     }
     return $rows;
 }
예제 #4
0
 /**
  * Factory method used to acquire instances of the given class.
  * The class name should be supplied as a string, and the class
  * should already have been loaded by PHP (or a suitable autoloader
  * should exist). This method actually returns a wrapped ORM object
  * which allows a database query to be built. The wrapped ORM object is
  * responsible for returning instances of the correct class when
  * its find_one or find_many methods are called.
  */
 public static function factory($class_name)
 {
     $table_name = self::_get_table_name($class_name);
     $wrapper = ORMWrapper::for_table($table_name);
     $wrapper->set_class_name($class_name);
     $wrapper->use_id_column(self::_get_id_column_name($class_name));
     return $wrapper;
 }
예제 #5
0
파일: dakota.php 프로젝트: powerpak/dakota
 /**
  * Magic function so that new operator works as expected
  */
 public function __construct()
 {
     $class_name = get_class($this);
     $table_name = self::_get_table_name($class_name);
     parent::__construct($table_name);
     $this->set_class_name($class_name);
     $this->use_id_column(self::_id_column_name($class_name));
 }