/** /* Constructor * * @param AbstractApi $dataMapper * @param string $apiName Api name providing data */ public function __construct(AbstractApi $dataMapper, $apiName) { $extractFunc = function ($value) use($dataMapper, $apiName) { $api = $dataMapper->api($apiName); if ($value instanceof ResultSet) { if ($value->valid()) { return $value->getHydrator()->extract($value->current()); } return null; } return $value; }; $hydrateFunc = function ($value) use($dataMapper, $apiName) { $api = $dataMapper->api($apiName); if (is_int($value)) { return $api->lazyLoadModelCollectionClosure($apiName, $value); } return $value; }; parent::__construct($extractFunc, $hydrateFunc); }
/** /* Constructor * * @param AbstractApi $dataMapper * @param string $apiName Api name providing data */ public function __construct(AbstractApi $dataMapper, $apiName) { $extractFunc = function ($value) use($dataMapper, $apiName) { $api = $dataMapper->api($apiName); if ($value instanceof ModelInterface) { $hydrator = $api->getHydrator(); $value = $hydrator->extract($value); return $value; } return $value; }; $hydrateFunc = function ($value) use($dataMapper, $apiName) { $api = $dataMapper->api($apiName); $hydrator = $api->getHydrator(); $objectPrototype = $api->getResultSetPrototype()->getObjectPrototype(); if (is_array($value)) { return $hydrator->hydrate($value, clone $objectPrototype); } elseif (is_int($value)) { return $api->lazyLoadModelClosure($apiName, $value); } return $value; }; parent::__construct($extractFunc, $hydrateFunc); }