Show
Ignore:
Timestamp:
08/14/10 02:40:01 (22 months ago)
Author:
ort
Message:

fix ORM

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/engine/classes/ModuleORM.class.php

    r982 r983  
    104104                        $oEntityEmpty=Engine::GetEntity($sEntityFull); 
    105105                        $aRelations=$oEntityEmpty->_getRelations(); 
    106                         $aEntityKeys=array();                    
     106                        $aEntityKeys=array(); 
    107107                        foreach ($aFilter['#with'] as $sRelationName) { 
    108                                 if (!array_key_exists($sRelationName,$aRelations) or !in_array($aRelations[$sRelationName][0],array(EntityORM::RELATION_TYPE_BELONGS_TO,EntityORM::RELATION_TYPE_HAS_ONE))) { 
     108                                $sRelType=$aRelations[$sRelationName][0]; 
     109                                $sRelEntity=$aRelations[$sRelationName][1]; 
     110                                $sRelKey=$aRelations[$sRelationName][2]; 
     111                                 
     112                                if (!array_key_exists($sRelationName,$aRelations) or !in_array($sRelType,array(EntityORM::RELATION_TYPE_BELONGS_TO,EntityORM::RELATION_TYPE_HAS_ONE))) { 
    109113                                        throw new Exception("The entity <{$sEntityFull}> not have relation <{$sRelationName}>"); 
    110114                                } 
    111                                  
     115 
    112116                                /** 
    113117                                 * Формируем список ключей 
    114118                                 */ 
    115119                                foreach ($aEntities as $oEntity) { 
    116                                         $aEntityKeys[$aRelations[$sRelationName][2]][]=$oEntity->_getDataOne($aRelations[$sRelationName][2]); 
     120                                        $aEntityKeys[$sRelKey][]=$oEntity->_getDataOne($sRelKey); 
    117121                                } 
    118                                 $aEntityKeys[$aRelations[$sRelationName][2]]=array_unique($aEntityKeys[$aRelations[$sRelationName][2]]); 
     122                                $aEntityKeys[$sRelKey]=array_unique($aEntityKeys[$sRelKey]); 
     123                                 
    119124                                /** 
    120125                                 * Делаем общий запрос по всем ключам 
    121126                                 */ 
     127                                $oRelEntityEmpty=Engine::GetEntity($sRelEntity); 
    122128                                 
    123                                 $aRelData=$this->GetItemsByArray(array('id'=>$aEntityKeys[$aRelations[$sRelationName][2]]),$aRelations[$sRelationName][1]); 
    124                                 var_dump($aRelData); 
    125                         } 
    126                         /** 
    127                          * Собираем набор 
    128                          */ 
     129                                $sRelModuleName=Engine::GetModuleName($oRelEntityEmpty); 
     130                                $sRelEntityName=Engine::GetEntityName($oRelEntityEmpty); 
     131                                $sRelPluginPrefix=Engine::GetPluginPrefix($oRelEntityEmpty); 
     132                                // ItemsByArrayId - id пока идет костылем, т.к. у стандартных сущностей нет метода _GetPrimatyKey() 
     133                                $aRelData=Engine::GetInstance()->_CallModule("{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByArrayId",array($aEntityKeys[$sRelKey])); 
     134                                /** 
     135                                 * Собираем набор 
     136                                 */ 
     137                                foreach ($aEntities as $oEntity) { 
     138                                        if (isset($aRelData[$oEntity->_getDataOne($sRelKey)])) { 
     139                                                $oEntity->_setData(array($sRelationName => $aRelData[$oEntity->_getDataOne($sRelKey)])); 
     140                                        } 
     141                                } 
     142                        } 
    129143                         
    130144                }