dodo-it/entity-generator

为几乎任何DBAL从数据库生成的实体生成器

2.1.0 2024-01-18 14:22 UTC

This package is auto-updated.

Last update: 2024-09-18 19:09:10 UTC


README

高度可定制的(类型化)数据库实体生成器。它可以生成整个数据库、表/视图以及原始SQL查询的实体

Latest Stable Version build Coverage Status PHPStan Total Downloads License

安装

$ 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