2011-11-28 59 views
1

有没有一种简单的方法从实体的类方法中获取Doctrine的实体管理器?我可以从实体的类方法中获取EntityManager吗?

<?php 

/** @Entity */ 
class MyEntity { 
    /** @Id @GeneratedValue @Column(type="integer") */ 
    protected $id; 

    [...] 

    public function someFunction() { 
    // Is there any way to get Doctrine's EntityManager in here? 
    } 
} 
+3

你不能这样做。你的实体不应该依赖于EntityManager或Repository。 – meze

+0

忘记我之前的评论:你为什么需要在一个实体的EM? – meze

+0

那么,我打算在某些情况下创建并坚持另一个对象,但我想最好在别处创建它。我确实设法通过将它存储在$ GLOBALS中来获得EM,但我会尝试重构。 – Matt

回答

4

你真的不应该这样做。数据映射器ORM(如Doctrine)背后的想法是,您的实体只是对持久层一无所知的普通旧对象。如果你发现自己想在你的实体内部添加一个EntityManager,那么这是一个信号,你应该创建一个某种服务类。

这就是说,学说相当灵活。例如,如果你非常喜欢,你可以使用Doctrine as the foundation for an ActiveRecord-style ORM

但是,除了非常具体的用例外,我不会推荐它。

+0

好的,谢谢,我会重构代码... – Matt

相关问题