public static function getRelationships(IEntity $entity)
{
$return = [[], [], []];
foreach ($entity->getMetadata()->getProperties() as $propertyMeta) {
if ($propertyMeta->relationship === null) {
continue;
}
$name = $propertyMeta->name;
if (!$propertyMeta->relationship->cascade['remove']) {
$return[2][$name] = $propertyMeta;
continue;
}
$rawValue = $entity->getRawValue($name);
if ($rawValue === null && $propertyMeta->isNullable) {
continue;
}
$property = $entity->getProperty($name);
if ($property instanceof IRelationshipContainer) {
$value = $entity->getValue($name);
if ($value) {
if ($propertyMeta->relationship->type === Relationship::ONE_HAS_ONE && !$propertyMeta->relationship->isMain) {
$return[0][$name] = $value;
} else {
$return[1][$name] = $value;
}
}
} elseif ($property instanceof IRelationshipCollection) {
$return[0][$name] = $entity->getValue($name);
}
}
return $return;
}