Doctrine / Symfony 2:关系太多的实体

时间:2012-08-08 21:46:05

标签: php symfony doctrine

我正在处理来自Doctrine查询的Entity对象,最终得到一个非常大的数组,所有实体的所有信息都相关。这最终成为一个巨大的数据树......我怎么能限制这个?避免列出所有关系中的所有数据?

1 个答案:

答案 0 :(得分: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的复杂查询),则可能只填充域对象的所需属性(最终是关联/嵌套集合)。

一个例子,更多关于native 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);
}

当然,disadvance(?)是使用本机SQL。我不相信ResultSetMapping可以与DQL一起使用。

编辑:看看http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/best-practices.html