[英]Doctrine MongoDB load associated documents for performance
我有一些参考许多项目的用户文档。
用户:
class User
{
//...
/**
* @ODM\ReferenceMany(targetDocument="Item", mappedBy="user", cascade={"remove"})
*/
protected $items;
//...
项目:
class Item
{
/**
* @ODM\ReferenceOne(targetDocument="User", inversedBy="items")
*/
protected $user;
我想显示所有用户的列表以及项目数。 所以我有一个查询:
$users = $dm->getRepository('Acme:User')->findAll();
我在“项目”字段上使用count
方法
{% for user in users %}
// ...
{{ document.items.count }} items
// ...
{% endfor %}
问题在于, Doctrine为每个用户创建了一个新请求,这导致了内存限制和超时。
当findAll请求时,是否有一种方法可以告诉教义加载所有项目? 我希望仅在需要时才执行此操作(不在实体定义中,而是在查询级别)。
默认情况下,主义会进行一些延迟加载,例如,直到请求数据时,它才提取数据。 如果希望避开延迟加载,则需要获取联接而不是常规联接。
http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#joins
这要求您编写自己的查询,因为“ findAll()”将不会成为您的朋友。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.