Example #1
0
 /**
  * 根据$bulider条件解析获取已缓存在PHP的数据
  * @param array $bulider
  * @param array $id_cache_data
  * @return boolean 是否需要再次读取
  */
 protected function _get_id_field_cache_data(&$bulider, &$id_cache_data)
 {
     $not_need_find = false;
     # $bulider条件中只有1个where,则尝试在数据ID缓存中获取
     if (count($bulider['where']) == 1 && ($bulider['where'][0]['AND'][1] == '=' || $bulider['where'][0]['AND'][1] == 'in')) {
         #
         foreach ($bulider['where'] as $k => $v) {
             if ($v && $k != 'where') {
                 return $not_need_find;
             }
         }
         $field_name = $bulider['where'][0]['AND'][0];
         if ($field_name == $this->id_field_name()) {
             $value = $bulider['where'][0]['AND'][2];
             $id_data = OOP_ORM_Data::id_field_cache_data($this->get_orm_name('Data'), $value);
             if ($id_data) {
                 # 获取到数据
                 if ($bulider['where'][0]['AND'][1] == 'in') {
                     $new_value = array();
                     foreach ($value as $v) {
                         if (!isset($id_data[$v])) {
                             $new_value[] = $v;
                         }
                     }
                     if ($new_value) {
                         # 更新where条件
                         $bulider['where'][0]['AND'][2] = $new_value;
                     } else {
                         $not_need_find = true;
                     }
                     $id_cache_data = $id_data;
                 } else {
                     $not_need_find = true;
                     $id_cache_data = array($id_data);
                 }
             }
         }
     }
     return $not_need_find;
 }