/**
  * 创建数据对象 但不保存到数据库
  * @access public
  * @param mixed $data 创建数据
  * @param string $type 状态
  * @param string $name 关联名称
  * @return mixed
  */
 public function create($data = '', $type = '', $name = true)
 {
     //是否使用关联
     if (empty($this->options['link'])) {
         return parent::create($data, $type);
     }
     // 如果没有传值默认取POST数据
     if (empty($data)) {
         $data = $_POST;
     } elseif (is_object($data)) {
         $data = get_object_vars($data);
     }
     // 验证数据
     if (empty($data) || !is_array($data)) {
         $this->error = L('_DATA_TYPE_INVALID_');
         return false;
     }
     //关联定义
     $relation = $this->_link;
     //验证规则
     $_validate = $this->_validate;
     //自动完成
     $_auto = $this->_auto;
     if (!empty($relation)) {
         // 遍历关联定义
         foreach ($relation as $key => $val) {
             // 操作制定关联类型
             $mappingName = $val['mapping_name'] ? $val['mapping_name'] : $key;
             // 映射名称
             if (empty($name) || true === $name || $mappingName == $name || is_array($name) && in_array($mappingName, $name)) {
                 //关联类名
                 $mappingClass = !empty($val['class_name']) ? $val['class_name'] : $key;
                 //关联类型
                 $mappingType = !empty($val['mapping_type']) ? $val['mapping_type'] : $val;
                 switch ($mappingType) {
                     case self::HAS_ONE:
                         //是否有副表数据
                         $isLinkData = false;
                         //数据
                         if (isset($data[$mappingName])) {
                             $sideTablesData = $data[$mappingName];
                             unset($data[$mappingName]);
                             $isLinkData = true;
                         }
                         //自动验证
                         if (isset($_validate[$mappingName])) {
                             $_validateSideTables = $_validate[$mappingName];
                             unset($_validate[$mappingName], $this->_validate[$mappingName]);
                         }
                         //自动完成
                         if (isset($_auto[$mappingName])) {
                             $_autoSideTables = $_auto[$mappingName];
                             unset($_auto[$mappingName], $this->_auto[$mappingName]);
                         }
                         //进行主表create
                         if ($type == 1) {
                             $data = parent::create($data, $type);
                         } else {
                             if (empty($data)) {
                                 $data = true;
                                 if (empty($sideTablesData)) {
                                     $this->error = L('_DATA_TYPE_INVALID_');
                                     return false;
                                 }
                             } else {
                                 $data = parent::create($data, $type);
                             }
                             //存在主键副表也自动加上
                             if (!empty($data[$this->getPk()])) {
                                 $sideTablesData[$this->getPk()] = $data[$this->getPk()];
                             }
                         }
                         //下面进行的是副表验证操作,这里需要检查特殊情况,例如没有开启关联的,其实不用进行下面
                         if (empty($this->options['link']) || empty($isLinkData)) {
                             return $data;
                         }
                         //关闭表单验证
                         C('TOKEN_ON', false);
                         //不管成功或者失败,清空_validate和_auto
                         $this->_validate = $this->_auto = array();
                         if ($data) {
                             if (empty($sideTablesData)) {
                                 return $data;
                             } else {
                                 $sideTablesData = M($mappingClass)->validate($_validateSideTables)->auto($_autoSideTables)->create($sideTablesData, $type);
                                 if ($sideTablesData) {
                                     if (is_array($data)) {
                                         return array_merge($data, array($mappingName => $sideTablesData));
                                     } else {
                                         return array($mappingName => $sideTablesData);
                                     }
                                 } else {
                                     $this->error = M($mappingClass)->getError();
                                     return false;
                                 }
                             }
                         } else {
                             return false;
                         }
                         break;
                     default:
                         return parent::create($data, $type);
                         break;
                 }
             }
         }
     }
     return parent::create($data, $type);
 }
Beispiel #2
0
 public function delete($phone)
 {
     $res = $this->checkField($phone);
     $flag = parent::delete($res['id']);
     if ($flag) {
         M('UserInfo')->where('user_id=' . $res['id'])->delete();
     }
     return $flag;
 }