我选择Symfony2 docs。据说添加
/**
* @ORM\Entity(repositoryClass="Acme\StoreBundle\Entity\ProductRepository")
*/
在我的实体文件中并运行php app/console doctrine:generate:entities Acme
应创建ProductRepository
文件。它没有。我不能更清楚地说明这一点,它只是不创建该文件,只是重新创建之前存在的那些实体文件。
答案 0 :(得分:26)
我遇到了同样的问题
但我在这里找到了答案: http://brentertainment.com/other/docs/book/doctrine/orm.html
如果您在添加repositoryClass映射之前已经生成了实体类,则必须自己创建该类。幸运的是,这很容易。只需在捆绑包的Repository目录中创建类,并确保它扩展了Doctrine \ ORM \ EntityRepository。创建类后,您可以添加任何方法来查询实体。
很简单,我们必须手动完成,因为我们已经运行过一次
答案 1 :(得分:8)
您可以尝试指定特定的捆绑包:
php app/console doctrine:generate:entities AcmeStoreBundle
请注意,我有完整的捆绑名称。
即使您之前运行doctrine:generate:entities
,这也必须有所帮助。
答案 2 :(得分:8)
如果您使用orm.yml文件生成实体,则可以定义repositoryClass,然后再次生成实体:
Acme\StoreBundle\Entity\Product:
type: entity
table: product
...
repositoryClass: Acme\StoreBundle\Entity\ProductRepository
...
然后运行:
php app/console doctrine:generate:entities AcmeStoreBundle
答案 3 :(得分:2)
超级简单的解决方案:
如果您还没有生成实体:
php app/console doctrine:generate:entity --entity="AppBundle:EntityName" --fields="id:string(255) content:text(100)"
现在将这些注释行修改为以前生成的实体:
* @ORM\Table(name="TABLENAME")
* @ORM\Entity(repositoryClass="AppBundle\Entity\EntityNameRepository")
现在,运行:
php app/console doctrine:generate:entities AppBundle:EntityNameRepository
现在你有了一个实体和存储库。 :)
答案 4 :(得分:1)
要解决此问题并生成repo类,您可以临时修改以下文件的结尾: 的symfony \厂商\教义\学说束\学说\捆绑\ DoctrineBundle \命令\ generateEntitiesDoctrineCommand.php
if ($m->customRepositoryClassName
&& false !== strpos($m->customRepositoryClassName, $metadata->getNamespace())) {
$repoGenerator->writeEntityRepositoryClass(
$m->customRepositoryClassName, $metadata->getPath());
}
使用以下代码:
if (true) {
$output->writeln(
sprintf(' > AND Repository <comment>%s</comment>', $m->name . "Repository")
);
$repoGenerator->writeEntityRepositoryClass(
$m->name . "Repository", $metadata->getPath());
}
一些解释:在此代码中,
如果您不使用&#39; if(true)&#39;条件,并希望自己检查一下,你也可以添加一个带有输出的兼性其他案例,以便将来获得充分的信息:
else {
$output->writeln(sprintf(' > NO repository generated for this class'));
}
修改完成后,您可以照常重新运行命令:
php app/console doctrine:generate:entities AcmeStoreBundle
这是一个临时代码,因为直到现在问题对我来说都不是很清楚,我看到的唯一的事情是它似乎来自$ m-&gt; customRepositoryClassName ,它返回一个空串。 因此,要找到另一个明确的解决方案,可以采用一种方法来检查元数据对象的方法customRepositoryClassName ...
答案 5 :(得分:-3)
基于Astucieux的回答:
if (true) {
$fullRepositoryClassName = $name . "\\Repository\\" . $basename . "Repository";
$output->writeln(
sprintf(' > AND Repository <comment>%s</comment>', $fullRepositoryClassName)
);
$repoGenerator->writeEntityRepositoryClass(
$fullRepositoryClassName, $metadata->getPath());
}