Symfony 2:getReference并找到

时间:2014-10-08 12:39:00

标签: symfony doctrine-orm

使用实体管理器getReference()find()方法为数据库的某些记录返回非初始化对象。你知道为什么和应该做什么吗?

1 个答案:

答案 0 :(得分:23)

如果对象尚未加载,则

getReference()不加载该对象,它只返回对象的代理。

find()返回一个加载的对象。

(CFR)。 the documentation

// this call does not trigger a db query, but creates an empty proxy with the ID
$objectA = $this->entityManager->getReference('EntityName', 1);

$this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $objectA); // === true

// this will trigger a query, loading the state that's configured to eager load
// since the UnitOfWork already has a proxy, that proxy will be reused
$objectB = $this->entityManager->find('EntityName', 1);

$this->assertSame($objectA, $objectB); // === true
对于特殊用例,

getReference()存在,如果您要提取对象以使用它们,请始终使用find()