Beispiel #1
0
 /**
  * Обновление связи many_to_many в бд
  *
  * @param array $aRelation     Соответствующий связи элемент массива из $oEntityORM->aRelations
  * @param array $aRelationData Соответствующий связи элемент массива из $oEntityORM->aRelationsData
  * @param int   $iEntityId     Id сущности, для которой обновляются связи
  */
 protected function _updateManyToManySet($aRelation, $aRelationData, $iEntityId)
 {
     /*
      * Описание параметров связи many_to_many
      * Для примера возьмём такую связь в сущности $oTopic
      * 'tags' => array(self::RELATION_TYPE_MANY_TO_MANY,'ModuleTopic_EntityTag', 'tag_id',  'db.table.topic_tag_rel', 'topic_id'),
      * И используется таблица связи
      * table prefix_topic_tag_rel
      *  topic_id | ефп_id
      * Тогда тут
      * [0] -> self::RELATION_TYPE_MANY_TO_MANY - тип связи
      * [1] -> 'ModuleTopic_EntityTag' - имя сущности объектов связи
      * [2] -> 'tag_id' - названия столбца в таблице связи, в котором содержатся id объектов связи, в нашем случае тегов.
      * [3] -> 'db.table.topic_tag_rel' - алиас (идентификатор из конфига) таблицы связи.
      *      Обратите внмание на то, что ORM для определения таблиц сущностей использует модуль и название сущности, то есть
      *      если мы захотим таблицу связи назвать prefix_topic_tag, что, в общем-то, логично, то будет конфликт имён, потому что
      *      ModuleTopic_EntityTag также преобразуется в prefix_topic_tag.
      *      Поэтому необходимо следить за корректным именованием таблиц (точнее алиасов в конфиге, сами таблицы в бд могут
      *      называться как угодно). В данном примере используется суффикс '_rel'.
      * [4] -> 'topic_id' - название столбца в таблице связи, в котором содержатся id сущности, для которой объявляется связь,
      *      в нашем случае топиков
      */
     $aSavedSet = $this->oMapper->getManyToManySet($aRelation[3], $aRelation[4], $iEntityId, $aRelation[2]);
     $aCurrentSet = array();
     foreach ($aRelationData as $oEntity) {
         $aCurrentSet[] = $oEntity->getProp($oEntity->_getPrimaryKey());
     }
     if ($aSavedSet == $aCurrentSet) {
         return;
     }
     $aInsertSet = array_diff($aCurrentSet, $aSavedSet);
     $aDeleteSet = array_diff($aSavedSet, $aCurrentSet);
     $this->oMapper->updateManyToManySet($aRelation[3], $aRelation[4], $iEntityId, $aRelation[2], $aInsertSet, $aDeleteSet);
 }