public static function saveEntity($entity) { if ($entity) { if (!$entity->validate('save')) { return false; } $entityCfg = $entity->getConfig(); $vars = array(); foreach ($entityCfg['columns'] as $key) { $vars[$key] = $entity->{$key}; } if (!empty($vars[$entityCfg['id']]) && !$entity->checkIsNewRecord()) { return DaoSupport::updateEntity($entity); } $pdoManager = PdoManager::getInstance(); $pdo = $pdoManager->getPdo($entity, true); try { $id = $pdo->insert($entityCfg['name'], $vars); } catch (Exception $e) { throw new DAOException(DAOException::DB_EXEC_EXCEPTION, DAOException::DB_EXEC_EXCEPTION_MESSAGE); } $cache = CacheManager::getInstance(); $entiList = $cache->get("inserted_or_deleted_or_updated_list"); if (!is_array($entiList)) { $entiList = array(); } array_push($entiList, @get_class($entity)); $cache->set("inserted_or_deleted_or_updated_list", $entiList); if ($id === false) { throw new DAOException(DAOException::DB_EXEC_EXCEPTION, DAOException::DB_EXEC_EXCEPTION_MESSAGE); } $relationCfg = $entity->getRelationPro(); foreach ($relationCfg as $var => $conf) { if (isset($conf['cascade'])) { $cascade = explode(",", $conf['cascade']); if (in_array("save", $cascade)) { $relationObject = $entity->{$conf}['name']; //单个实体 if (is_object($relationObject)) { $relationObject->{$conf}['column'] = $id; self::saveEntity($relationObject); } //实体数组 if (is_array($relationObject)) { foreach ($relationObject as $objectItem) { if (is_object($objectItem)) { $objectItem->{$conf}['column'] = $id; self::saveEntity($objectItem); } } } } } } return $id; } return false; }
/** * 按实体更新数据库,若不指定 where 则按给定主键更新; * @param object $entity * @param array $where */ public function update($entity, $where = null) { return DaoSupport::updateEntity($entity, $where); }