2011-09-29 85 views
2

我正在使用PHP和Doctrine 2.0。所有的实体都可以正常工作,除了下面详细描述的实体关系外(或者其他实体在我没有注意到的地方失败)。懒惰加载属性不加载在Doctrine 2.0中


考虑下面的实体:

/** @Entity */ 
class Target { 
    /** 
    * @ManyToOne(targetEntity="k\entity\Source", cascade={"persist"}) 
    * @JoinColumn(name="basic_vacancy_id", nullable=false) 
    * @var \k\entity\Source 
    */ 
    $source; 

    ... 
} 

/** @Entity */ 
class Source { 

    ... 
} 

现在,当我打电话$target->getSource()我得到的k\entity\proxy\kentitySourceProxy一个实例(这是正确的代理类)。但是,Source属性的所有获取者都会返回NULL

我会做什么错?


我已经添加了fetch="EAGER"属性关系注解,现在一切似乎去就好了(除了一个事实,即装载不再偷懒)。什么会导致Doctrine 2.0的延迟加载中断?

回答

2

如上面在我的问题中所看到的,我已经将fetch =“EAGER”属性添加到关系注释中,现在一切似乎都很好(除了加载不再懒惰的事实)。

这当然是一个解决方法,并没有修复实际的错误。除此之外,我仍然不知道是什么导致我的代码/原则中断。但是,这种解决方法对性能的影响似乎可以忽略不计 - 即使完全存在。

0

它看起来像内部的d2错误。或者您使用反射来检索对象的属性。代理类使用persister在任何方法调用时初始化它们。当您在此代理上使用getter时,它是否发出查询?

-1

我有一个非常similart问题,这里报告: -

Zend 1.11.11 Doctrine 2.1.2 initalising of associative proxy entities

你在哪里添加抓取= “心切” 的属性?

+0

-1,因为这不是我的问题的答案 - 但我会,但是,扩大我的问题/答案,以包括此(有据可查)的信息。 – wen

+0

如果我得到了我的问题的答案,我会让你知道:) –