/** * Добавление сущности в БД * Вызывается не напрямую, а через сущность, например * <pre> * $oUser->setName('Claus'); * $oUser->Add(); * </pre> * * @param EntityORM $oEntity Объект сущности * @return EntityORM|bool */ protected function _AddEntity($oEntity) { $res = $this->oMapperORM->AddEntity($oEntity); // сбрасываем кеш if ($res === 0 or $res) { $sEntity = $this->Plugin_GetRootDelegater('entity', get_class($oEntity)); $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array($sEntity . '_save')); } if ($res === 0) { // у таблицы нет автоинремента $oEntity->_setOriginalData($oEntity->_getDataFieldsForDb()); return $oEntity; } elseif ($res) { // есть автоинкремент, устанавливаем его $oEntity->_setData(array($oEntity->_getPrimaryKey() => $res)); $oEntity->_setOriginalData($oEntity->_getDataFieldsForDb()); /** * Смотрим наличие связи many_to_many и добавляем их в бд */ foreach ($oEntity->_getRelations() as $sRelName => $aRelation) { if ($aRelation['type'] == EntityORM::RELATION_TYPE_MANY_TO_MANY && $oEntity->{$sRelName}->isUpdated()) { $this->_updateManyToManyRelation($oEntity, $sRelName); $oEntity->resetRelationsData($sRelName); } } return $oEntity; } return false; }
/** * Добавление сущности в БД * Вызывается не напрямую, а через сущность, например * <pre> * $oUser->setName('Claus'); * $oUser->Add(); * </pre> * * @param EntityORM $oEntity Объект сущности * * @return EntityORM|bool */ protected function _AddEntity($oEntity) { $res = $this->oMapper->AddEntity($oEntity); // сбрасываем кеш if ($res === 0 || $res) { $sEntity = E::ModulePlugin()->GetRootDelegater('entity', get_class($oEntity)); E::ModuleCache()->Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array($sEntity . '_save')); } if ($res === 0) { // у таблицы нет автоинремента return $oEntity; } elseif ($res) { // есть автоинкремент, устанавливаем его $oEntity->_setData(array($oEntity->_getPrimaryKey() => $res)); // Обновление связей many_to_many $aRelationsData = $oEntity->_getRelationsData(); foreach ($oEntity->_getRelations() as $sRelName => $aRelation) { if ($aRelation[0] == EntityORM::RELATION_TYPE_MANY_TO_MANY && $oEntity->{$sRelName}->isUpdated()) { // Сброс кэша по связям E::ModuleCache()->Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('m2m_' . $aRelation[2] . $aRelation[4] . $oEntity->_getPrimaryKeyValue())); $this->_updateManyToManySet($aRelation, $oEntity->{$sRelName}->getCollection(), $oEntity->getProp($oEntity->_getPrimaryKey())); $oEntity->resetRelationsData($sRelName); } } return $oEntity; } return false; }