Beispiel #1
0
 /**
  * Parses a belongs to field in the meta
  * @param zibo\library\orm\definition\field\BelongsToField $field
  * @return null
  * @param zibo\library\orm\ModelManager $modelManager Instance of the model manager
  */
 private function parseBelongsToField(BelongsToField $field, ModelManager $modelManager)
 {
     $name = $field->getName();
     $modelName = $this->getName();
     $relationModelName = $field->getRelationModelName();
     try {
         $relationModel = $modelManager->getModel($relationModelName);
     } catch (OrmException $exception) {
         throw new ModelException('No relation model found for field ' . $name . ' in ' . $modelName);
     }
     $relation = new RelationMeta();
     $relation->setIsRelationWithSelf($relationModelName == $modelName);
     $this->relations[$name] = $relation;
     $this->belongsTo[$name] = $field;
     $relationFields = $relationModel->getMeta()->getRelation($modelName);
     if (!$relationFields[ModelTable::BELONGS_TO] && !$relationFields[ModelTable::HAS_MANY] && !$relationFields[ModelTable::HAS_ONE]) {
         return;
     }
     if ($relationFields[ModelTable::HAS_MANY]) {
         $relationType = ModelTable::HAS_MANY;
     } else {
         if ($relationFields[ModelTable::HAS_ONE]) {
             $relationType = ModelTable::HAS_ONE;
         } else {
             return;
         }
     }
     $relationField = array_shift($relationFields[$relationType]);
     if ($relationField->isLocalized()) {
         $linkModelName = $field->getLinkModelName();
         if (empty($linkModelName)) {
             throw new ModelException('No link model found for field ' . $name . ' in ' . $modelName);
         }
         $relation->setLinkModelName($linkModelName);
     }
 }