Highly customizable (typed) entity generator from database. It can generate entities for whole database, table/view and from raw SQL query
$ composer require dodo-it/entity-generator
$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();
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
see src/Generator/Config.php