一个Symfony2应用程序有一个实体
除了额外的细节之外,
我经常需要访问工作中仅有的一小部分任务(也许是1000个中的10个),目前通过遍历
对于大量任务(数千,数万),从数据库加载任务集合可能需要很长时间。
我希望减少获取子任务所需的时间。我可以使用自定义实体仓库通过id和工作检索
我想知道Symfony2和/或Doctrine2是否已经存在用于执行此操作的内置功能。
我的想法是具有相关实体集合的实体是常见情况(例如博客文章和评论),并且在实体级别上可能会有一些与分页相关的概念,以仅检索相关实体的子集。
是否有我需要的内置Symfony2功能?
更新1:
我理想情况下仍然希望能够遍历
Job
,它有一个tasks
属性,是一组Task
实体。
Job->getTasks()
被用来迭代给定作业的任务集合。Doctrine会惰性加载封装在tasks
属性中的Task
实体。我猜测它们是在调用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功能?
更新1:
我理想情况下仍然希望能够遍历
Job->getTasks()
,并知道它将返回我已经指定的一小部分任务。
Job->getTasks()
时要加载哪个子集的“Task”实体。这是一个不错的方面,但我认为它并没有回答我的问题。 - Jon CramCollection#slice($offset, $length = null);
方法。因为文档指出,集合将仅加载在slice()
范围内定义的实体。 - Mun Mun Das