Symfony 4和Doctrine,如何在映射后自动生成存储库?

时间:2018-08-09 18:58:27

标签: symfony doctrine

我发现的所有教程都在创建新表时使用make:entity自动创建了存储库

但是我已经按照以下命令从官方documentation导入现有数据库:php bin/console doctrine:mapping:import App\\Entity annotation --path=src/Entity

此命令似乎没有创建任何存储库...,并且文档中没有谈论生成存储库

我知道我可以手动创建一个,但是有命令自动生成它们吗?我有25张桌子。...会很有用

我很懒

编辑:我也尝试过php bin\console make:entity --regenerate,但是我在所有表上都得到了no change,并且没有创建存储库

4 个答案:

答案 0 :(得分:12)

解决方案1 ​​

您只需运行

php bin\console make:entity --regenerate

这将提示并要求:

Enter a class or namespace to regenerate [App\Entity]:

只需按Enter或指定您的实体文件夹的位置,它将创建丢失的getter / setters和存储库。

test

--->警告:
如果未创建存储库,请确保您的实体中具有以下注释:

/**
 * @ORM\Entity(repositoryClass="App\Repository\MyClassRepository")
 */
class MyClass
{

}

解决方案2

SymfonyMakerBundle允许您创建自己的制造者。因此,您可以创建一个名为make:repositories的新文件,它将为/ Entity文件夹中找到的每个实体生成一个存储库。

为此,请在您的src/Maker/目录中创建一个扩展AbstractMaker的类(MakeRepositories)。 (文档:https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html#creating-your-own-makers

使用核心制造商make:entity来帮助您创建新命令(因为它包含用于生成存储库的代码):https://github.com/symfony/maker-bundle/blob/master/src/Maker/MakeEntity.php

答案 1 :(得分:1)

如何从现有数据库生成实体

表名:CamelCase(例如:table_name将为TableName)

php bin/console doctrine:mapping:import App\\Entity annotation --path=src/Entity --filter="TableName"

如何生成实体

运行以下命令,它将创建实体文件。

php bin/console make:entity --regenerate

下一步,转到您的实体文件并添加@ORM\Entity repositoryClass

示例实体文件

/**
 * XXXXXX
 *
 * @ORM\Table(name="XXXX")
 * @ORM\Entity(repositoryClass="App\Repository\XXXXRepository")
 */

class XXXXX {

再次运行此命令,它将为您创建存储库。

php bin/console make:entity --regenerate

答案 2 :(得分:1)

从数据库生成实体类后,将以下注释添加到每个实体中:

@ORM\Entity(repositoryClass="App\Repository\ClassNameRepository")

要生成存储库类,请运行以下命令:

php bin/console make:entity --regenerate App

答案 3 :(得分:0)

不要太快地复制注释,我复制了注释,但是在我的情况下,实体是自动生成的,因此已经有一行ORM \ Repository,该行之后出现,请删除它或将其替换为解决方案