protected function createSubdivisionFromDefinitions($code, array $definitions)
{
if (!isset($definitions['subdivisions'][$code])) {
// No matching definition found.
return null;
}
$definition = $definitions['subdivisions'][$code];
// The 'parents' key is omitted when it contains just the country code.
$definitions += ['parents' => [$definitions['country_code']]];
$parents = $definitions['parents'];
// Load the parent, if known.
$definition['parent'] = null;
if (count($parents) > 1) {
$grandparents = $parents;
$parentId = array_pop($grandparents);
$parentGroup = $this->buildGroup($grandparents);
if (!isset($this->parents[$parentGroup][$parentId])) {
$this->parents[$parentGroup][$parentId] = $this->get($parentId, $grandparents);
}
$definition['parent'] = $this->parents[$parentGroup][$parentId];
}
// Prepare children.
if (!empty($definition['has_children'])) {
$childrenParents = array_merge($parents, [$code]);
$children = new LazySubdivisionCollection($childrenParents);
$children->setRepository($this);
$definition['children'] = $children;
}
return new Subdivision($definition);
}