情况:
我想使用doctrine2 Entity Manager 的getReference()函数。但是,在我请求一个已从数据库中删除的对象的情况下,如果我多次请求同一个对象,我将获得一个代理。
一个例子:
//A random article object...that has been deleted from the database
$articleClass = 'Acme\ArticleBundle\Entity\Article';
$articleIdentifiers = array('id'=>1);
$i = 0;
//We ask for its reference twice
do{
try {
echo "a";
$subject = $this->em->getReference(
$subjectClass,
$subjectIdentifiers
);
//call this object now
var_dump($subject);
} catch (\Exception $e) {
echo "b";
}
$i++;
} while ($i <2);
输出:
a
b
a
object(Proxies\__CG__\Acme\ArticleBundle\Entity\Article)
如何获取数据库中甚至不存在的对象的代理?如果我评论这一行,entityManager 不会管理对象并且我会获得输出abab
,这对我来说更有意义,因为我不想获得数据库中不存在的代理对象。对于信息,返回的代理对象具有其所有属性null
。因此,我获得了数据库中不存在的对象的代理。所以,如果我要求这个对象,我会得到一个“未找到实体”异常。
挑战
任何人都可以理解这一点吗?有没有办法依靠getReference()
来告诉我们这个对象是否真的存在于数据库中?