Beispiel #1
0
 /**
  * 获取所有元数据
  *
  * 若没有主键则返回false
  *
  * @param bool $reload_from_db 如果数据没则自动从数据库加载
  * @return array|false
  */
 public function get_all_metadata($reload_from_db = true)
 {
     if (!$this->pk()) {
         return false;
     }
     $meta_group_of_key = OOP_ORM_DI::get_meta_group_of_key($this->_class_name);
     $meta_table_of_key = OOP_ORM_DI::get_meta_table_of_key($this->_class_name);
     $data = array();
     if ($meta_group_of_key) {
         if ($this->_metadata) {
             # 检查下是否全部加载完毕
             $table_loaded = array();
             foreach ($meta_table_of_key as $key => $table) {
                 if (isset($table_loaded[$table])) {
                     # 已经加载过的表
                     continue;
                 }
                 $group = $meta_group_of_key[$key];
                 if (is_array($this->_metadata[$table]) && array_key_exists($group, $this->_metadata[$table])) {
                     continue;
                 }
                 # 重新加载全部数据
                 $this->finder()->load_metadata($this, $table);
                 # 标记为已经加载过
                 $table_loaded[$table] = 1;
             }
         } else {
             if ($reload_from_db) {
                 $this->finder()->load_all_metadata($this);
             }
         }
         foreach ($meta_table_of_key as $key => $table) {
             $this->_get_di_by_key($key)->get_field_data($this, $data, $this->_compiled_data[$key], $this->_is_temp_instance && !$this->_is_support_object_value);
         }
     }
     return $data;
 }
Beispiel #2
0
 /**
  * 加载对应数据库所有元数据
  *
  * @param OOP_ORM_Data $obj
  * @return $this
  * @throws Exception
  */
 public function load_all_metadata(OOP_ORM_Data $obj)
 {
     $class_name = $obj->class_name();
     $meta_table_of_key = OOP_ORM_DI::get_meta_table_of_key($class_name);
     $meta_group_of_key = OOP_ORM_DI::get_meta_group_of_key($class_name);
     if (!$meta_table_of_key) {
         # 没有元数据
         return $this;
     }
     # 没有主键
     if (!$obj->pk()) {
         return $this;
     }
     $keys_of_table = array();
     foreach ($meta_table_of_key as $key => $table) {
         $keys_of_table[$table][] = $key;
     }
     $data = array();
     $groups_of_table = array();
     # 读数据
     foreach ($keys_of_table as $table => $keys) {
         foreach ($this->load_metadata($obj, $table) as $hash => $item) {
             $data[$table][$item['meta_group']][$hash] = $item;
         }
         foreach ($keys as $key) {
             $group = $meta_group_of_key[$key];
             $groups_of_table[$table][$group] = $group;
         }
     }
     foreach ($groups_of_table as $table => $groups) {
         foreach ($groups as $group) {
             # 预置空数据
             $obj->__orm_callback('set_metadata', $table, $group, array());
         }
     }
     foreach ($data as $table => $group_data) {
         foreach ($group_data as $group => $item) {
             $obj->__orm_callback('set_metadata', $table, $group, $item);
         }
     }
     return $this;
 }