我有一些用户文档引用了很多项目。
用户:
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();
我在“items”字段中使用count
方法
{% for user in users %}
// ...
{{ document.items.count }} items
// ...
{% endfor %}
问题是 Doctrine会为每个用户创建一个新请求,这会导致内存限制和超时。
有没有办法告诉doctrine在执行findAll请求时加载所有项目?我希望这只在需要时完成(不是在实体定义中,而是在查询级别)。
答案 0 :(得分:0)
默认情况下,doctrine执行一些延迟加载,例如在请求之前,它不会提取数据。如果你想绕过延迟加载,你需要一个获取连接而不是常规连接。
http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#joins
这要求您将自己的查询编写为" findAll()"不会是你的朋友。