/** * @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; }
protected function parseSimple($arrData, $member, $memberReference, $isOwner) { if (count($arrData) > 2) { $simple = $arrData[2]; } else { if ($isOwner) { $simple = $this->naming->member2fk($memberReference); } else { //TODO CRAP CRAP CRAP $arrMeta = $this->engine->meta($member); $simple = $arrMeta['primary_key']; } } return $simple; }
/** * @param $member * @return SFM_DAO */ public function getDAO($member) { return $this->engine->getDao($member); }