Symfony2 / Doctrine:仅加载相关实体的子集

时间:2012-09-21 16:33:46

标签: symfony doctrine-orm entity

Symfony2应用程序有一个Job实体,它具有tasks属性,是Task个实体的集合。

Job->getTasks()用于迭代给定作业的任务集合。封装在Task属性中的tasks实体由Doctrine延迟加载。我猜他们在getTasks()点被加载了。

删除了额外的详细信息后,Job实体看起来像这样:

<?php

class Job
{        
    /**
     * @var \Doctrine\Common\Collections\Collection
     * @ORM\OneToMany(targetEntity="Example\Bundle\Entity\Task\Task", mappedBy="job")
     */
    private $tasks;

    public function __construct()
    {
        $this->tasks = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getTasks()
    {        
        return $this->tasks;
    }
}

我经常只需要访问作业中所有任务的子集(可能是1000个中的10个),目前通过迭代getTasks()并选择具有相关ID的那些任务来完成。

对于大型任务集合(数千,数万),从数据库加载任务集合可能需要很长时间。

我想减少访问一部分任务所需的时间。我可以通过使用自定义实体存储库来按ID和作业检索Task实体。

我想知道Symfony2和/或Doctrine2的内置功能是否已存在。

我的想法是,具有相关实体集合的实体是常见情况(例如,博客文章和评论),并且在实体级别可能存在一些与分页相关的概念,用于仅检索相关实体的子集

是否有我需要的内置Symfony2功能?

UPDATE1:

理想情况下,我希望能够继续遍历Job->getTasks()知道它只返回我以某种方式指定的任务子集。

1 个答案:

答案 0 :(得分:4)

我认为您正在寻找Extra Lazy Association