public function addField($n, $defaults = [])
{
if (!isset($defaults['aggregate'])) {
throw new Exception(['"aggregate" strategy should be defined for oneToMany field', 'field' => $n, 'defaults' => $defaults]);
}
$field = isset($defaults['field']) ? $defaults['field'] : $n;
$e = $this->owner->addExpression($n, function () use($defaults, $field) {
return $this->refLink()->action('fx', [$defaults['aggregate'], $field]);
});
if (isset($defaults['type'])) {
$e->type = $defaults['type'];
} else {
$e->type = $this->guessFieldType($field);
}
return $e;
}