protected function resolve($table)
{
$definition = $this->loader->get($table);
if (!$definition) {
throw new \Exception("{$table} definition doesn't exist.");
}
$sub_tree = ['name' => $table, 'relations' => []];
$foreign_keys = isset($definition->foreign) ? $definition->foreign : [];
foreach ($definition->fields as $field_name => $field_def) {
if (isset($field_def->foreign)) {
$foreign_keys[$field_name] = $field_def->foreign;
}
}
foreach ($foreign_keys as $field_name => $foreign) {
list($foreign_table, $foreign_field) = explode('.', $foreign);
$sub_tree['relations'][] = ['from_table' => $table, 'to_table' => $foreign_table, 'from_field' => $field_name, 'to_field' => $foreign_field, 'table' => $this->resolve($foreign_table)];
}
return $sub_tree;
}