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

Symfony 4和条令,映射后如何自动生成存储库?,symfony,doctrine,Symfony,Doctrine,我找到的所有教程都在创建新表时使用make:entity自动创建了存储库 但我一直在使用以下命令从现有数据库中导入:php bin/console原则:mapping:import-App\\Entity-annotation--path=src/Entity 此命令似乎没有创建任何存储库。。。文档中并没有提到生成存储库 我知道我可以手动创建一个,但是否有命令自动生成它们?我有25张桌子。。。。这将非常有用 懒惰的我 编辑:我还尝试了php-bin\console-make:entity--re

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

但我一直在使用以下命令从现有数据库中导入:php bin/console原则:mapping:import-App\\Entity-annotation--path=src/Entity

此命令似乎没有创建任何存储库。。。文档中并没有提到生成存储库

我知道我可以手动创建一个,但是否有命令自动生成它们?我有25张桌子。。。。这将非常有用

懒惰的我


编辑:我还尝试了
php-bin\console-make:entity--regenate
,但我没有对所有表进行更改,也没有创建存储库

解决方案1

你可以直接跑

php bin\console make:entity --regenerate
这将提示并要求:

Enter a class or namespace to regenerate [App\Entity]:
只需按Enter键或指定实体文件夹的位置,就会创建缺少的getter/setter和存储库

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

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

}
如果缓存不起作用,您可能还需要清除缓存(如@Pavel Petrov在评论中所述)

解决方案2

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

为此,在
src/Maker/
目录中创建一个扩展AbstractMaker的类(MakeRepositories)。(文件:)


使用core maker
make:entity
帮助您创建新命令(因为它包含生成存储库的代码):

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

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

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

php-bin/console原则:映射:import-App\\Entity-annotation--path=src/Entity--filter=“TableName”


如何生成实体

运行下面的命令,它将创建实体文件

php-bin/console-make:entity-regenate

接下来,转到实体文件并添加
@ORM\entity repositoryClass

示例实体文件

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

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


php-bin/console-make:entity——重新生成

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

@ORM\Entity(repositoryClass="App\Repository\ClassNameRepository")
要生成存储库类,请运行以下命令:

php bin/console make:entity --regenerate App

您真的需要为所有实体定制存储库类吗?在大多数情况下,自定义存储库类都是无用的死代码——除非您正在实现自定义存储库方法,这在我的经验中是相当罕见的。因此,不自动生成这些存根是有意义的。萨姆,不要这样做。仅在需要时创建repository类。感谢您的建议,忘了提及我尝试过,但我得到的是所有表上的
无更改。它没有创建任何回购协议。将更新我的问题以反映this@Sam我添加了另一种可能性。不确定为什么解决方案1没有创建任何内容??尝试解决方案2,在
src/maker
中创建一个文件
MakeRepositories.php
,然后扩展
AbstractMaker
,然后从类中的make entity链接复制第135到295行。然后我键入
/bin/console make:repositories
,但它没有定义。请问我在哪里定义它?文档上说,
确保你的类注册为服务,并用maker.command标记,但我不明白你的实体中有这个注释:@ORM\Entity(repositoryClass=“App\Repository\MyClassRepository”)?(指定存储库)我没有,但添加了
@ORM\Entity(repositoryClass=“App\repository\bikedbrespository”)
,现在它说
无法自动连接服务“App\repository\bikedbrespository”:方法“Doctrine\Bundle\DoctrineBundle\repository\ServiceEntit yRepository::\uu construct()”的参数“$entityClass”没有类型提示,您应该显式地配置它的值。
当我运行
make::entity--regenate时