dodo-it / entity-generator
Entity generator from database for almost any DBAL
Installs: 104 894
Dependents: 1
Suggesters: 0
Security: 0
Stars: 6
Watchers: 2
Forks: 1
Open Issues: 1
Requires
- php: ^8.1
- doctrine/inflector: ^2.0
- nette/php-generator: ^4.0
- nette/utils: ^3.1
Requires (Dev)
- contributte/qa: ^0.3
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-strict-rules: ^1.0
- phpunit/phpunit: >=9.0
README
Highly customizable (typed) entity generator from database. It can generate entities for whole database, table/view and from raw SQL query
Installation
$ composer require dodo-it/entity-generator
How to run:
$config = new \DodoIt\EntityGenerator\Generator\Config([ 'path' => __DIR__ . '/Entities', 'extends' => \Examples\Pdo\Entities\Entity::class, 'namespace' => 'Examples\Pdo\Entities' ]); $pdo = new \PDO('mysql:dbname=example;host=127.0.0.1', 'root', ''); $generatorFactory = new \DodoIt\EntityGenerator\Factory\GeneratorPdoFactory($pdo); $generator = $generatorFactory->create($config); $generator->generate();
What kind of entities can I get?
Tool is highly customizable and can generate various different entity types of which most interesting are:
- PHP 7.4 typed properties
class ArticleEntity extends YourBaseEntity { public int $id; public ?string $title; public bool $published; public ?\DateTimeInterface $created_at; }
- properties with phpdoc
class ArticleEntity extends YourBaseEntity { /** @var int */ protected $id; /** @var string */ protected $title; /** @var bool */ protected $published; /** @var \DateTimeInterface */ protected $created_at; }
- properties with getters and setters (methods body is customizable)
class ArticleEntity extends YourBaseEntity { public function getId(): int { return $this->id; } public function setId(int $value): self { $this['id'] = $value; return $this; } public function getTitle(): ?string { return $this->title; } public function setTitle(?string $value): self { $this['title'] = $value; return $this; } public function getPublished(): bool { return $this->published; } public function setPublished(bool $value): self { $this['published'] = $value; return $this; } public function getCreatedAt(): ?\DateTimeInterface { return $this->created_at; } public function setCreatedAt(?\DateTimeInterface $value): self { $this['created_at'] = $value; return $this; }
- phpdoc properties
/** * @property int $id * @property string $title * @property int $published * @property \DateTimeInterface $created_at */ class ArticleEntity extends YourBaseEntity { }
- properties with phpdoc
class ArticleEntity extends YourBaseEntity { /** @var int */ public $id; /** @var string */ public $title; /** @var bool */ public $published; /** @var \DateTimeInterface */ public $created_at;
- it can generate column constants (use generateColumnConstants option)
class ArticleEntity extends YourBaseEntity { public const TABLE_NAME = 'articles'; public const ID = 'id'; public const TITLE = 'title'; public const PUBLISHED = 'published'; public const CREATED_AT = 'created_at'; . . .
- almost any combination you can imagine, check src/Generator/Config.php for list of all options see example folder
You can add your own methods to entities and change getter/setter functions, they won't be overriden when regenerated if rewrite flag is set to false
Configuration
see src/Generator/Config.php