/** * 创建数据对象 但不保存到数据库 * @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); }
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; }