3

Symfony2 アプリケーションには、エンティティのコレクションでJobあるプロパティを持つエンティティがあります。tasksTask

Job->getTasks()特定のジョブのタスクのコレクションを反復処理するために使用されます。プロパティにカプセル化されたTaskエンティティは、tasksDoctrine によって遅延ロードされます。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

I think you are looking for Extra Lazy Association.

于 2012-09-21T17:07:28.353 に答える