/**
  * Добавление сущности в БД
  * Вызывается не напрямую, а через сущность, например
  * <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;
 }
Beispiel #2
0
 /**
  * Добавление сущности в БД
  * Вызывается не напрямую, а через сущность, например
  * <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;
 }