stepapo / model
Library that uses structured DB definitions to generate DDL and DML queries and Nextras ORM entity properties.
Installs: 79
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/stepapo/model
Requires
- php: >=8.3
- nette/di: ^3.2
- nette/utils: ^4.0
- nextras/dbal: ^5.0
- nextras/orm: ^5.0
- stepapo/utils: ^1.0
- webovac/generator: dev-main
This package is auto-updated.
Last update: 2025-10-17 15:22:41 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']);
Manipulations
Analyzes database rows, compares to Manipulation configs and runs DML queries if needed. Requires Nette DI and Nextras ORM.
Build\Model\Person\Person.php
You can generate entity properties with Webovac Generator.
namespace Build\Model\Person; use Build\Model\Person\PersonData; /** * @property int $id {primary} * * @property string $firstName * @property string $lastName * @property string|null $email * * @property DateTimeImmutable $createdAt {default now} * @property DateTimeImmutable|null $updatedAt * * @method PersonData getData() */ class Person extends Stepapo\Model\Orm\StepapoEntity { public function getDataClass(): string { return PersonData::class; } }
Build\Model\Person\PersonData.php
namespace Build\Model\Person; class PersonData extends Stepapo\Model\Data\Item { public ?int $id; public string $email; public string $firstName; public string $lastName; }
Build\Model\Person\PersonRepository.php
namespace Build\Model\Person; class PersonRepository extends Stepapo\Model\Orm\StepapoRepository { }
config/manipulations/persons.neon
class: Build\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']);