Lean Mapper extension for Nette.
Download a latest package or use Composer:
composer require janpecha/leanmapper-extension
Extension requires:
- PHP 7.2 or later
- Nette 3.0 or later
- LeanMapper 4.0 or later
extensions:
leanmapper: JP\LeanMapperExtension\LeanMapperExtension
leanmapper:
# database connection
username: ...
password: ...
database: ...
leanmapper:
# required
username: ...
password: ...
database: ...
# optional
connection: LeanMapper\Connection
host: localhost
driver: mysqli
lazy: true
profiler: ... # on|off or NULL => enabled in debug mode, disabled in production mode
charset: utf8mb
leanmapper:
entityFactory: LeanMapper\DefaultEntityFactory
entityMapping:
table: EntityClass
table:
entity: EntityClass
repository: RepositoryClass # only mapping, you need manually register repository to DI
primaryKey: table_primary_key
articles:
entity: App\Model\Article
primaryKey: article_id
leanmapper:
mapper: true # bool
defaultEntityNamespace: 'Model\Entity'
nameMapping: camelcase # default | camelcase | underscore
prefix: null
use Nette\DI\CompilerExtension;
use JP\LeanMapperExtension\IEntityProvider;
class FooExtension extends CompilerExtension implements IEntityProvider
{
// from IEntityProvider
function getEntityMappings()
{
return array(
array(
'table' => 'foo_articles',
'primaryKey' => 'id',
'entity' => Foo\Model\Article::class,
'repository' => Foo\Model\ArticleRepository::class, # only mapping, you need manually register repository to DI
),
// ...
);
}
}
STI mapping
use Nette\DI\CompilerExtension;
use JP\LeanMapperExtension\IStiMappingProvider;
class FooExtension extends CompilerExtension implements IStiMappingProvider
{
function getStiMappings()
{
return [
Model\Entity\Client::class => [ // base entity
// type => target entity
'company' => Model\Entity\ClientCompany::class,
],
// ...
];
}
function getStiTypeFields()
{
return [
Model\Entity\Client::class => 'clientType',
];
}
}
Row mapping
use Nette\DI\CompilerExtension;
use JP\LeanMapperExtension\IRowMappingProvider;
class FooExtension extends CompilerExtension implements IRowMappingProvider
{
function getRowFieldMappings()
{
return [
\Model\Entity\OrderItem::class => [
'currency' => [
'fromDbValue' => [static::class, 'currencyFromDb'],
'toDbValue' => [static::class, 'currencyToDb'],
]
],
// ...
];
}
function getRowMultiValueMappings()
{
return [
\Model\Entity\OrderItem::class => [
'price' => [
'fromDbValue' => [static::class, 'priceFromDb'],
'toDbValue' => [static::class, 'priceToDb'],
],
],
];
}
static function currencyFromDb($value)
{
return strtoupper($value);
}
static function currencyToDb($value)
{
return strtolower($value);
}
static function priceFromDb(array $values)
{
return [$values['price'], $values['currency']];
}
static function priceToDb($value)
{
return [
'price' => $value[0],
];
}
}
License: New BSD License
Author: Jan Pecha, http://janpecha.iunas.cz/