Пример #1
0
    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);
}
Пример #2
0
<?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