public function __construct(string $product, string $price) { $this->product = $product; $this->price = $price; } public function getProduct() : string { return $this->product; } public function getPrice() : \Currency { return $this->price; } } // we need a custom TypeMapper for our value object class CurrencyTypeMapper implements \Agares\MicroORM\TypeMapperInterface { public function fromString(string $fieldName, array $fields) { return new Currency($fields[$fieldName], $fields[$fieldName . '_currency']); } } // let's try this: $typeMappers = ['string' => new \Agares\MicroORM\TypeMappers\StringTypeMapper(), 'int' => new \Agares\MicroORM\TypeMappers\IntegerTypeMapper(), 'Currency' => new CurrencyTypeMapper()]; $entityMapper = new \Agares\MicroORM\EntityMapper($typeMappers); $queryAdapter = new \Agares\MicroORM\QueryAdapter($databaseAdapter, $entityMapper); $transactions = $queryAdapter->executeQuery('SELECT product, price, price_currency FROM transactions', $entityDefinitionCreator->create(Transaction::class)); foreach ($transactions as $transaction) { /** @var Transaction $transaction */ printf('%s (%s)%s', $transaction->getProduct(), (string) $transaction->getPrice(), PHP_EOL); }
<?php declare (strict_types=1); require_once __DIR__ . '/../vendor/autoload.php'; // this initialisation might look complex, but remember that it's done only once - in your DI container $pdo = new \PDO('sqlite::memory:'); $databaseAdapter = new \Agares\MicroORM\PDODbAdapter($pdo); $entityMapper = new \Agares\MicroORM\EntityMapper(); $queryAdapter = new \Agares\MicroORM\QueryAdapter($databaseAdapter, $entityMapper); $entityDefinitionCreator = new \Agares\MicroORM\EntityDefinitionCreator(new \Agares\MicroORM\FieldNameMappers\ToUnderscores()); // let's create some data! $queryAdapter->executeCommand('CREATE TABLE people (firstname TEXT, lastname TEXT, age INT)'); $people = [['Jeff', 'Lebowski', 30], ['Bunny', 'Lebowski', 25], ['The', 'Dude', 50]]; foreach ($people as $person) { $parameters = array(':firstname' => $person[0], ':lastname' => $person[1], ':age' => $person[2]); $queryAdapter->executeCommand('INSERT INTO people VALUES(:firstname, :lastname, :age)', $parameters); } // time to start the real fun! // Let's create an entity class Person { /** * @var string */ private $firstname; /** * @var string */ private $lastname; /** * @var int