protected function validateRelations($entity)
{
$relations = $entity->relations($this, $entity);
foreach ($relations as $relationName => $relation) {
if ($relation instanceof Relation\HasOne || $relation instanceof Relation\BelongsTo) {
$relatedEntity = $entity->{$relationName};
if ($relatedEntity instanceof EntityInterface) {
$errorsRelated = $this->validateRelatedEntity($relatedEntity, $entity, $relation);
if (count($errorsRelated)) {
$entity->errors([$relationName => $errorsRelated], false);
}
}
} else {
if ($relation instanceof Relation\HasMany || $relation instanceof Relation\HasManyThrough) {
$relatedEntities = $entity->{$relationName};
//No point in validating Queries since they are not modified
if ((is_array($relatedEntities) || $relatedEntities instanceof Entity\Collection) && count($relatedEntities)) {
$errors = [];
foreach ($relatedEntities as $key => $related) {
$errorsRelated = $this->validateRelatedEntity($related, $entity, $relation);
if (count($errorsRelated)) {
$errors[$key] = $errorsRelated;
}
}
if (count($errors)) {
$entity->errors([$relationName => $errors], false);
}
}
}
}
}
return $entity;
}