public function GetItemsByJoinEntity($sEntityJoin, $sKeyJoin, $sRelationKey, $aRelationValues, $aFilter, $sEntityFull = null)
 {
     $sEntityFull = $this->_NormalizeEntityRootName($sEntityFull);
     /**
      * Кеширование
      * Если параметр #cache указан и пуст, значит игнорируем кэширование для запроса
      */
     if (array_key_exists('#cache', $aFilter) && !$aFilter['#cache']) {
         $aEntities = $this->oMapperORM->GetItemsByJoinEntity($sEntityJoin, $sKeyJoin, $sRelationKey, $aRelationValues, $aFilter, $sEntityFull);
     } else {
         $sEntityJoin = $this->Plugin_GetRootDelegater('entity', $sEntityJoin);
         $sCacheKey = 'items_by_join_entity_' . serialize(array($sEntityJoin, $sKeyJoin, $sRelationKey, $aRelationValues, $aFilter, $sEntityFull));
         /**
          * Формируем теги для сброса кеша
          * Сброс идет по обновлению запрашиваемой сущности
          * Дополнительно по обновлению таблицы связей
          */
         $aCacheTags = array($sEntityFull . '_save', $sEntityFull . '_delete', $sEntityJoin . '_save', $sEntityJoin . '_delete');
         $iCacheTime = 60 * 60 * 24;
         // todo: скорее лучше хранить в свойстве сущности, для возможности выборочного переопределения
         /**
          * Переопределяем из параметров
          */
         if (isset($aFilter['#cache'][0])) {
             $sCacheKey = $aFilter['#cache'][0];
         }
         if (isset($aFilter['#cache'][1])) {
             $aCacheTags = $aFilter['#cache'][1];
         }
         if (isset($aFilter['#cache'][2])) {
             $iCacheTime = $aFilter['#cache'][2];
         }
         /**
          * Смотрим в кеше
          */
         if (false === ($aEntities = $this->Cache_Get($sCacheKey))) {
             $aEntities = $this->oMapperORM->GetItemsByJoinEntity($sEntityJoin, $sKeyJoin, $sRelationKey, $aRelationValues, $aFilter, $sEntityFull);
             $this->Cache_Set($aEntities, $sCacheKey, $aCacheTags, $iCacheTime);
         }
     }
     /**
      * Если запрашиваем постраничный список, то возвращаем сам список и общее количество записей
      */
     if (isset($aFilter['#page'])) {
         if (isset($aFilter['#cache'][0])) {
             /**
              * Задан собственный ключ для хранения кеша, поэтому нужно его сменить для передачи в GetCount*
              * Добавляем префикс 'count_'
              */
             $aFilter['#cache'][0] = 'count_' . $aFilter['#cache'][0];
         }
         return array('collection' => $aEntities, 'count' => $this->GetCountItemsByJoinEntity($sEntityJoin, $sKeyJoin, $sRelationKey, $aRelationValues, $aFilter, $sEntityFull = null));
     }
     return $aEntities;
 }