dodo-it / entity-generator
为几乎任何DBAL从数据库生成的实体生成器
2.1.0
2024-01-18 14:22 UTC
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
高度可定制的(类型化)数据库实体生成器。它可以生成整个数据库、表/视图以及原始SQL查询的实体
安装
$ 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();
我能得到哪些类型的实体?
该工具高度可定制,可以生成各种不同的实体类型,其中最有意思的是
- PHP 7.4 类型属性
class ArticleEntity extends YourBaseEntity { public int $id; public ?string $title; public bool $published; public ?\DateTimeInterface $created_at; }
- 带 phpdoc 的属性
class ArticleEntity extends YourBaseEntity { /** @var int */ protected $id; /** @var string */ protected $title; /** @var bool */ protected $published; /** @var \DateTimeInterface */ protected $created_at; }
- 带获取器和设置器的属性(方法体可自定义)
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 属性
/** * @property int $id * @property string $title * @property int $published * @property \DateTimeInterface $created_at */ class ArticleEntity extends YourBaseEntity { }
- 带 phpdoc 的属性
class ArticleEntity extends YourBaseEntity { /** @var int */ public $id; /** @var string */ public $title; /** @var bool */ public $published; /** @var \DateTimeInterface */ public $created_at;
- 它可以生成列常量(使用 generateColumnConstants 选项)
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'; . . .
- 几乎任何你可以想象到的组合,查看 src/Generator/Config.php 获取所有选项的列表,参见示例文件夹
你可以向实体添加自己的方法并更改获取器和设置器函数,如果重写标志设置为 false,则它们在重新生成时不会被覆盖
配置
查看 src/Generator/Config.php