0

私は Doctrine クエリから Entity オブジェクトを操作していますが、すべてのエンティティからのすべての情報が関連する非常に大きな配列になってしまいます。これは最終的に巨大なデータツリーになります...どうすればこれを制限できますか? すべての関係からすべてのデータをリストすることを避けますか?

4

1 に答える 1

1

不要な関連付けはいつでも削除できます (これは Doctrine を高速化するためのベスト プラクティスです)。または、プレゼンテーション レイヤーで必要なフィールドのみを (読み取り専用データとして) 選択することもできます。

public function getAll()
{
    $qb = $this->createQueryBuilder('u'); // Where are in User custom repository

    return $qb
        ->select(array('u.id', 'u.first', 'u.last'))
        ->getQuery()
            ->getResult();
}

オブジェクト (または単純な SQL を必要とする複雑なクエリ) を操作する必要がある場合は、ドメイン オブジェクトの必要なプロパティ (および最終的には関連付け/ネストされたコレクション) のみを埋める可能性があります。

例、ネイティブ SQLの詳細:

public function getAll()
{
    $mapping = new \Doctrine\ORM\Query\ResultSetMapping();

    $mapping->addEntityResult('Acme\HelloBundle\User', 'e');

    $mapping->addFieldResult('e', 'id', 'id');
    $mapping->addFieldResult('e', 'first', 'first');
    $mapping->addFieldResult('e', 'last', 'last');

    $sql = "SELECT id, first, last FROM user ";

    $result = $this->_em->createNativeQuery($sql, $mapping)->getResult();

    // Or hust return $result itself (array)
    return new \Doctrine\Common\Collections\ArrayCollection($result);
}

もちろんデメリット(?)はネイティブSQLの使用です。ResultSetMappingDQLで使用できるとは思わない。

編集: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/best-practices.htmlをご覧ください。

于 2012-08-08T22:54:58.423 に答える