我喜欢教义,但我在绘图/注释方面遇到了一些问题。一开始我使用了映射文件。然后我转换成注释。现在我想创建自定义存储库类,所以我在这里阅读:http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes。
不幸的是现在我有一个错误:
No mapping file found named '\src\Vendor\ProductBundle\Resources\config\doctrine/SynchronizationSettingRepository.orm.yml' for class 'Vendor\ProductBundle\Entity\SynchronizationSettingRepository'.
当然我没有这个文件因为我不再使用映射了。 我添加了:
* @ORM\Entity(repositoryClass="Vendor\ProductBundle\Entity\SynchronizationSettingRepository")
到父实体和重新生成的实体。我通过命令php app / console doctrine:generate:entities VendorProductBundle重新生成了Entites,但仍然没有。 Regural和doctrine meadata缓存很清楚。
这是一个YML,我希望再次生成自定义存储库:
Vendor\ProductBundle\Entity\SynchronizationSetting:
type: entity
table: synchronization_setting
repositoryClass: Vendor\SynchronizationSetting\Entity\SynchronizationSettingRepository
indexes:
id_product:
columns:
- id_product
id:
id:
type: integer
nullable: false
unsigned: true
comment: ''
id: true
generator:
strategy: IDENTITY
fields:
open:
type: string
nullable: true
length: 1
fixed: true
comment: ''
default: '0'
internet:
type: string
nullable: true
length: 1
fixed: true
comment: ''
default: '0'
manyToOne:
idProduct:
targetEntity: Product
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
id_product:
referencedColumnName: id
orphanRemoval: false
lifecycleCallbacks: { }
这是一个存储库类:
<?php
// src/Acme/StoreBundle/Entity/ProductRepository.php
namespace Vendor\ProductBundle\Entity;
use Doctrine\ORM\EntityRepository;
class SynchronizationSettingRepository extends EntityRepository
{
public function findAllOrderedByName()
{
return $this->getEntityManager()
->createQuery(
'SELECT p FROM AcmeStoreBundle:Product p ORDER BY p.name ASC'
)
->getResult();
}
}
答案 0 :(得分:2)
我认为添加@ORM\Entity
的效果不大,因为只要您运行.php
,完整的doctrine:generate:entities
类文件就会被覆盖。您需要将repositotyClass
添加到YML
文件中。
如果您切换到注释,那些.yml
文件(实际上doctrine
内的整个config
目录)是无用的,除了是用于生成基于注释的实体的中间文件。 / p>
另一件事:Doctrine认为你有一个名称以“Repository”结尾的实体。
您能告诉我们YML
档案的内容吗?如果您没有(如您所说),则无法生成实体。您始终可以直接生成基于注释的实体(不需要YML
中间体)