/** * 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); } }