使用Symfony2/doctrine2,当我们使用find()函数根据选择的实体获取特定对象(如果存在关系)时(如OneToMany),Doctrine返回所有其他对象。
例如 :
$em = $this->get(
'doctrine.orm.entity_manager',
$request->getSession()->get('entity_manager')
);
$product = $em->getRepository('MyBundle:Product')->find($id);
$product 上的结果将是 Product 对象 + 其他链接对象,例如(商店、类别等)
我们如何控制原则来确定我们需要归还哪个对象。
我可以使用 Querybuilder,但我正在寻找是否有任何函数都是确定的。
教义返回所有其他对象
这不是它的工作原理,至少在默认情况下是这样。
教义使用所谓的延迟加载.
从官方文档中可以看到以下示例:
<?php
/** @Entity */
class Article
{
/** @Id @Column(type="integer") @GeneratedValue */
private $id;
/** @Column(type="string") */
private $headline;
/** @ManyToOne(targetEntity="User") */
private $author;
/** @OneToMany(targetEntity="Comment", mappedBy="article") */
private $comments;
public function __construct {
$this->comments = new ArrayCollection();
}
public function getAuthor() { return $this->author; }
public function getComments() { return $this->comments; }
}
$article = $em->find('Article', 1);
以及以下解释:
而不是向您传回一个真实的 Author 实例和集合
comments Doctrine 将为您创建代理实例。仅当你
第一次访问这些代理时,他们将通过
EntityManager 并从数据库加载它们的状态。
参考:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#entity-object-graph-traversal
有关该主题的更多信息:http://www.doctrine-project.org/blog/doctrine-lazy-loading.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)