/** * 创建数据对象 但不保存到数据库 * @access public * @param mixed $data 创建数据 * @param string $type 状态 * @param string $type 关联名称 * @return mixed */ public function create($data = '', $type = '', $name = true) { // 如果没有传值默认取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 HAS_ONE: //数据 if (isset($data[$mappingName])) { $sideTablesData = $data[$mappingName]; unset($data[$mappingName]); } //自动验证 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()]; } } //关闭表单验证 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; case BELONGS_TO: //不支持 return parent::create($data, $type); break; case HAS_MANY: //不支持 return parent::create($data, $type); break; case MANY_TO_MANY: //不支持 return parent::create($data, $type); break; } } } } else { return parent::create($data, $type); } }