Doctrine:为什么$ entity-> ManyToOneRelation-> getId()确实向数据库发出查询?

时间:2016-05-12 16:46:30

标签: php mysql symfony doctrine-orm doctrine

我有一个带有referrer字段的User类:

class User {
    /**
     * @ORM\ManyToOne(targetEntity="User", cascade={"detach"})
     * @ORM\JoinColumn(name="referrer", referencedColumnName="id")
     */
    protected $referrer = null;

    public function getReferer(){
        return $this->referrer;
    }
}

我读到的是,自从Doctrine 2.2调用$user->getReferer()->getId()后,我应该在没有学说的情况下引用附加查询。

但就我而言,学说是从数据库中获取整个实体。 我做错了什么?

我使用symfony 2.7.1并运行echo \Doctrine\ORM\Version::VERSION来检查doctrine的版本。

$user->getReferrer()尚未解除任何其他查询。)

修改

我如何测试它:

$user = $this->getUser();
$referrer = $user->getReferrer();
//Until there one query is executed by security(?) to fetch authenticated user.
//Referrer is not yet initialized.

$this->addFlash('info', 'Referrer id: '.$referrer->getId());
//Now second query was fired. And $refferer is now initialized.

return array('data' => $referrer); //return $refferer object for twig dump.

对于没有getId()的代码,Twig会转储这样的内容:

User {#1184 ▼
    +__isInitialized__: false
    #id: "2"
    #referrer: null
}

这适用于getId()上使用$referrer的代码:

User {#1184 ▼
    +__isInitialized__: true
    #id: 2      
    #referrer: null
}

0 个答案:

没有答案