Doctrine orm 第2条原则|标准与DQL |绩效;可用性

Doctrine orm 第2条原则|标准与DQL |绩效;可用性,doctrine-orm,dql,doctrine-query,Doctrine Orm,Dql,Doctrine Query,我想知道在原则2中,通过复杂查询获取集合的最佳实践是什么。我一直在使用Cirteria匹配功能,但我想知道它是否适用于大型数据库 $expr = Criteria::expr(); $criteria = Criteria::create(); $criteria->where( $expr->andX( $expr->gte('start', $start), $expr->lte('end', $end) ) ); $result = (ne

我想知道在原则2中,通过复杂查询获取集合的最佳实践是什么。我一直在使用Cirteria匹配功能,但我想知道它是否适用于大型数据库

$expr = Criteria::expr();
$criteria = Criteria::create();
$criteria->where(
  $expr->andX(
    $expr->gte('start', $start),
    $expr->lte('end', $end)
  )
);

$result = (new ArrayCollection($em->getRepository(Entity::class)->findAll())->matching($criteria);
使用DQL编写的同一个过滤器在性能上有什么不同

$qb = $em->createQueryBuilder();
$qb->select('e')
    ->from('Entity', 'e')
    ->where('e.start >= :start')
    ->andWhere('e.end <= :end')
    ->setParameters(array('start' => $start, 'end' => $end));

return $qb->getQuery()->getArrayResult();
$qb=$em->createQueryBuilder();
$qb->选择('e')
->from('实体','e')
->其中('e.start>=:start')

->andWhere('e.end=?和end您能添加分析数据吗?我的意思是每次运行1000次迭代,并提供时间和内存峰值。这更像是一个关于使用什么的一般问题。但我做了一些简单的测试,发现标准解决方案绝对不可用(即使查询花费的时间最少)因为当你获取>500个对象时,你很可能会耗尽php分配的内存。因此,这是不可能的。到目前为止,最好的答案是使用DQL作为它,根据我的简单测试,这是最快的。你能添加分析数据吗?我的意思是每次运行1000次迭代,并提供时间和内存峰值。它更像是一个g一般的问题是使用什么。但是我做了一些简单的测试,发现标准解决方案是绝对不可用的(即使查询花费的时间最少)因为当您获取>500个对象时,很可能会耗尽php分配的内存。因此,这是不可能的。根据我的简单测试,目前最好的答案是使用DQL作为它的内存。
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Entity', 'e');

$query = $this->_em->createNativeQuery('SELECT * FROM Entity WHERE start >= ? AND end <= ?', $rsm);
$query->setParameter(1, $start);
$query->setParameter(2, $end);

$result = $query->getResult();