Doctrine orm 第2条原则|标准与DQL |绩效;可用性
我想知道在原则2中,通过复杂查询获取集合的最佳实践是什么。我一直在使用Cirteria匹配功能,但我想知道它是否适用于大型数据库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
$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();