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