public function bootRunTime(Object $object, Configs $configs)
{
$field = $this->getFieldDefinition();
//check for n-to-n relation and create crossTable
if (AbstractStorage::MANY_TO_MANY == $field->getObjectRelation()) {
if ($this->defineCrossObject($object, $configs)) {
$configs->addReboot(sprintf('Added crossObject for field %s', $field->getId()));
}
}
// //check for n-to-1 and one-to-one objectRelations and create cross object with relations
// if (ORMAbstract::MANY_TO_ONE == $field->getObjectRelation() ||
// ORMAbstract::ONE_TO_ONE == $field->getObjectRelation()
// ) {
if ($this->defineRelation($object, $configs)) {
$configs->addReboot(sprintf('Defined relation %s from %s -> %s', $field->getObjectRelation(), $object->getKey() . '.' . $field->getId(), $field->getObject()));
}
// }
//create virtual reference-field for many-to-one relations
if ($this->getFieldDefinition()->getObjectRelation() == AbstractStorage::MANY_TO_ONE) {
if ($object = $configs->getObject($field->getObject())) {
if (!($refName = $field->getObjectRefRelationName())) {
$refName = $field->getObjectDefinition()->getId();
}
$refName = lcfirst($refName);
$virtualField = $object->getField($refName);
if (!$virtualField) {
$virtualField = new Field(null, $object->getJarves());
$virtualField->setVirtual(true);
$virtualField->setId($refName);
$virtualField->setType('object');
$virtualField->setLabel('Auto Object Relation (' . $field->getObject() . ')');
$virtualField->setObject($field->getObjectDefinition()->getKey());
$virtualField->setObjectRelation(AbstractStorage::ONE_TO_MANY);
$object->addField($virtualField);
$configs->addReboot(sprintf('Added virtualField for field %s', $field->getId()));
}
}
}
}