/** * Parser callback for onAfterBelongsTo event * * @param BelongsTo $relation The data structure * @param LocatorInterface $locator The XML description file locator * * @return void */ public function handleBelongsTo(BelongsTo $relation, LocatorInterface $locator) { $basename = $this->getBasename($relation->name); $field = new Field(get_object_vars($relation)); $field->name = $basename . '_id'; $field->type = 'relationKey'; $this->reflector->addField($field); $this->reflector->addHandler($basename, function () use($relation, $locator) { $reference = $this->reflector->get($relation->name); if (empty($reference)) { return null; } $basename = $this->getBasename($relation->name); // The record from {$relation->entity} with id={$field->value} $repository = new Repository($relation->entity, $locator); $entity = $repository->findById($reference); $this->reflector->addField(new Field(['name' => $basename, 'type' => 'relationData', 'value' => $entity])); return $entity; }); }