stepapo / model
Library that uses structured DB definitions to generate DDL and DML queries and Nextras ORM entity properties.
dev-main
2025-03-06 12:22 UTC
Requires
- php: >=8.3
- nette/di: ^3.2
- nette/utils: ^4.0
- nextras/dbal: ^5.0
- nextras/orm: ^5.0
- stepapo/generator: dev-main
- stepapo/utils: ^1.0
This package is auto-updated.
Last update: 2025-03-06 12:23:04 UTC
README
Library that uses structured DB definitions to generate DDL and DML queries and Nextras ORM entity properties.
Instalation
- run composer
composer require stepapo/model
config/config.neon
extensions: stepapo.model: Stepapo\Model\DI\ModelExtension stepapo.model: parameters: # array of parameters to use in various configurations, testMode: # true or false, driver: # mysql|pqsql, database: # default db schema, schemas: # array of schemas to work with
Usage
Definitions
Analyzes database schemas, tables and columns, compares to Definition configs and runs DDL queries if needed. Requires Nette DI and Nextras Dbal.
config/definitions/db.neon
schemas: public: tables: person: columns: id: [type: int, null: false, auto: true] email: [type: string, null: false] first_name: [type: string, null: false] last_name: [type: string, null: false] created_at: [type: datetime, null: false, default: now] updated_at: [type: datetime, null: true] primaryKey: id uniqueKeys: [email]
bin/processDefinitions.php
App\Bootstrap::boot() ->createContainer() ->getByType(Stepapo\Model\Definition\DbProcessor::class) ->process([__DIR__ . '/../config/definitions']);
Entity Properties
Analyzes Nextras ORM entities, compares to Definition configs and updates entity properties if needed. Requires Nextras ORM.
config/definitions/db.neon
See Definitions
App\Model\Person\Person.php
namespace App\Model\Person; class Person extends Stepapo\Model\Orm\StepapoEntity { }
bin/processEntities.php
$generator = new Stepapo\Generator\Generator; $propertyProcessor = new PropertyProcessor(['defaultSchema' => /* 'public' for pgsql, db name for mysql */], $generator); $propertyProcessor->process([__DIR__ . '/../config/definitions']);
- results in updated entity file
namespace App\Model\Person; /** * @property int $id {primary} * * @property string $firstName * @property string $lastName * @property string|null $email * * @property DateTimeImmutable $createdAt {default now} * @property DateTimeImmutable|null $updatedAt */ class Person extends Stepapo\Model\Orm\StepapoEntity { }
Manipulations
Analyzes database rows, compares to Manipulation configs and runs DML queries if needed. Requires Nette DI and Nextras ORM.
App\Model\Person\Person.php
namespace App\Model\Person; /** * @method PersonData getData() */ class Person extends Stepapo\Model\Orm\StepapoEntity { public function getDataClass(): string { return PersonData::class; } }
Generate properties with Entity Properties.
App\Model\Person\PersonData.php
namespace App\Model\Person; class PersonData extends Stepapo\Model\Data\Item { public ?int $id; public string $email; public string $firstName; public string $lastName; }
App\Model\Person\PersonRepository.php
namespace App\Model\Person; class PersonRepository extends Stepapo\Model\Orm\StepapoRepository { }
config/manipulations/persons.neon
class: App\Model\Person\PersonData items: admin: email: 'admin@test.test' firstName: admin lastName: admin user: email: 'user@test.test' firstName: user lastName: user
bin/processManipulations.php
App\Bootstrap::boot() ->createContainer() ->getByType(Stepapo\Model\Manipulation\Processor::class) ->process([__DIR__ . '/../config/manipulations']);