Ejemplo n.º 1
0
 /**
  * @param SFM_RelationSide $side
  * @param SFM_Entity $entity
  * @throws SFM_Exception
  * @return null|SFM_Entity|SFM_List
  */
 public function loadByEntity(SFM_RelationSide $side, SFM_Entity $entity)
 {
     $inverseSide = $this->getInverseSide($side);
     $mapper = $this->engine->mapper($inverseSide->member);
     $simpleValue = $entity->getSimple($side->simple);
     if ($side->isOwner) {
         if ($inverseSide->isMany) {
             //Many to Many case
             throw new SFM_Exception('Not implemented yet');
         } else {
             //Many to One
             $complexValue = $mapper->getEntityById($simpleValue);
         }
     } else {
         if ($inverseSide->isMany) {
             $complexValue = $mapper->getListByParams(array($inverseSide->simple => $simpleValue), array());
         } else {
             //One to One
             $complexValue = $mapper->getEntityByUniqueKeyByRelationOnly($inverseSide->simple, $simpleValue);
         }
     }
     $entity->setComplexByRelationOnly($side->complex, $complexValue);
     if (!$side->isOwner) {
         if ($complexValue instanceof SFM_Entity) {
             $complexValue->setComplexByRelationOnly($inverseSide->complex, $entity);
         } elseif ($complexValue instanceof SFM_List) {
             /**@var SFM_Entity $complexEntity */
             foreach ($complexValue as $complexEntity) {
                 $complexEntity->setComplexByRelationOnly($inverseSide->complex, $entity);
             }
         }
     }
     return $complexValue;
 }