Doctrine orm 延迟加载代理在访问主标识符时也从数据库加载实体

Doctrine orm 延迟加载代理在访问主标识符时也从数据库加载实体,doctrine-orm,lazy-loading,proxy-classes,Doctrine Orm,Lazy Loading,Proxy Classes,我正在使用$entityManager->getReference为我的实体获取代理。当我调用主键的getter时,我将初始化代理并执行SELECT查询。我预计这只会发生在调用其他未被条令知晓的属性时 下面的代码说明了该问题: $myEntity = $em->getReference('MyNamespace\MyEntity', 1); $myEntity->getId(); //This will execute a database call. I expect it to

我正在使用$entityManager->getReference为我的实体获取代理。当我调用主键的getter时,我将初始化代理并执行SELECT查询。我预计这只会发生在调用其他未被条令知晓的属性时

下面的代码说明了该问题:

$myEntity = $em->getReference('MyNamespace\MyEntity', 1);
$myEntity->getId(); //This will execute a database call. I expect it to just return 1
延迟加载代理中的getter如下所示:

public function getId()
{

    $this->__initializer__ && $this->__initializer__->__invoke($this, 'getId', array());

    return parent::getId();
}

这是故意的行为还是我忽略了什么?

按设计工作。在大多数情况下,您将使用引用对象本身。你已经知道id了。是的,我当然知道id,但是我在我的域中传递实体,这是从OOP的角度来看你想要的。我的消费类需要不知道Proxy和persistance db相关的代码处理完全水合的实体,就像Proxy.Yep一样。但在ORM系统中,id仅用于持久性。因此,您的消费类首先不应该调用getId。