If the storage backend should also create a constraint so its not possible to pass a invalid reference id.
public setWithConstraint ( boolean $withConstraint ) | ||
$withConstraint | boolean |
/** * @param Configs $configs * @return RelationDefinition|null * @throws \Jarves\Exceptions\ModelBuildException */ protected function getRelation(Configs $configs) { $field = $this->getFieldDefinition(); $columns = []; $foreignObjectDefinition = $configs->getObject($field->getObject()); if (!$foreignObjectDefinition) { throw new ModelBuildException(sprintf('ObjectKey `%s` not found for field `%s` in object `%s`', $field->getObject(), $field->getId(), $field->getObjectDefinition()->getId())); } $relation = new RelationDefinition(); $relation->setName($field->getId()); $relation->setType($field->getObjectRelation()); $relation->setForeignObjectKey($field->getObject()); $relation->setWithConstraint($field->getObjectRelationWithConstraint()); if ($refName = $field->getObjectRefRelationName()) { $relation->setRefName($refName); } foreach ($foreignObjectDefinition->getPrimaryKeys() as $pk) { $fieldColumns = $pk->getFieldType()->getColumns(); $columns = array_merge($columns, $fieldColumns); } if (!$columns) { return null; } $references = []; foreach ($columns as $column) { $reference = new RelationReferenceDefinition(); $localColumn = clone $column; $localColumn->setName($field->getId() . ucfirst($column->getName())); $reference->setLocalColumn($localColumn); $reference->setForeignColumn($column); $references[] = $reference; } $relation->setReferences($references); return $relation; }