3

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 的任务来实现。

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

我想减少访问任务子集所需的时间。我可以通过使用自定义实体存储库Task按 id 和作业检索实体来做到这一点。

我想知道 Symfony2 和/或 Doctrine2 的内置功能是否已经存在用于执行此操作。

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

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

更新1:

理想情况下,我希望能够在Job->getTasks()知道它将仅返回我以某种方式指定的任务子集时仍然能够迭代。

4

1 回答 1

4

我认为您正在寻找Extra Lazy Association

于 2012-09-21T17:07:28.353 回答