我想知道如何对从Doctrine 2中的实体关联映射中获得的结果进行分页?例如
class Customer {
/**
* @OneToMany(targetEntity="Order")
*/
private $orders;
}
可以这样使用:
$customer->getOrders();
将返回Order
个对象的集合。
问题是当有大量订单对象时。
我们可以在构建自定义查询时使用Doctrine\ORM\Tools\Pagination\Paginator
,但是在使用关联映射时,我没有看到任何方法可以挂钩查询生成。
class Paginator {
/**
* @param Query|QueryBuilder $query A Doctrine ORM query or query builder.
*/
function __construct(
//....
答案 0 :(得分:5)
如果您使用EXTRA_LAZY提取模式,则Doctrine在保湿系列时不会检索所有对象。它只会检索在集合上使用slice()方法时所需的子集。
class Customer {
/**
* @OneToMany(targetEntity="Order", fetch="EXTRA_LAZY")
*/
private $orders;
}
$cust = new Customer;
$orders = $cust->getOrders()->slice(100, 50);
您需要验证它与分页的交互方式。
答案 1 :(得分:0)
集合具有过滤API,允许从集合中分割部分数据。如果尚未从数据库加载集合,则过滤API可以在SQL级别上工作,以便对大型集合进行优化访问。 Doctrine Filtering Collections
class Customer {
/**
* @OneToMany(targetEntity="Order")
*/
private $orders;
public function getOrders($offset = 0, $limit = 30){
$criteria = Criteria::create()
->setFirstResult($offset)
->setMaxResults($limit);
return $this->orders->matching($criteria);
}
}
$cust = new Customer;
$orders = $cust->getOrders(50, 100);