Php 原则:为什么$entity->;许多关系->;getId()是否触发对数据库的查询?
我有一个带有referer字段的用户类:Php 原则:为什么$entity->;许多关系->;getId()是否触发对数据库的查询?,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,我有一个带有referer字段的用户类: class User { /** * @ORM\ManyToOne(targetEntity="User", cascade={"detach"}) * @ORM\JoinColumn(name="referrer", referencedColumnName="id") */ protected $referrer = null; public function getReferer(){
class User {
/**
* @ORM\ManyToOne(targetEntity="User", cascade={"detach"})
* @ORM\JoinColumn(name="referrer", referencedColumnName="id")
*/
protected $referrer = null;
public function getReferer(){
return $this->referrer;
}
}
我读到的是,自从第2.2条规则以来,当我调用$user->getReferer()->getId()
时,我应该在不触发额外查询的情况下获得引用的id
但在我的例子中,原则是从数据库中获取整个实体。
我做错了什么
我使用symfony 2.7.1并运行echo\doctor\ORM\Version::Version
检查doctor的版本
($user->getReferer()
尚未触发任何其他查询。)
编辑:
我如何测试它:
$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.
Twig为不带getId()
的代码转储类似的内容:
这适用于在$referer
上使用getId()
的代码:
User {#1184 ▼
+__isInitialized__: true
#id: 2
#referrer: null
}
你在哪里读到这样的东西?因为这是不对的。@Cerad,首先我发现这里没有提到任何版本,然后我发现这里提到了2.2版本的条令没有公平链接到我自己的帖子。代码中必须有其他内容正在访问仲裁对象。也许它正在被序列化?@Cerad我用测试代码更新了我的帖子。你在哪里读到这样的东西?因为这是不对的。@Cerad,首先我发现这里没有提到任何版本,然后我发现这里提到了2.2版本的条令没有公平链接到我自己的帖子。代码中必须有其他内容正在访问仲裁对象。也许它正在被序列化?@Cerad我用测试代码更新了我的帖子。
User {#1184 ▼
+__isInitialized__: true
#id: 2
#referrer: null
}